Как вращать числа по осям, используя Python Matplotlib - PullRequest
0 голосов
/ 02 апреля 2020

Существует точечная диаграмма, построенная с помощью Matplotlib, которая имеет больше точек, чем может содержать нижняя ось, поэтому числа начинают перекрывать друг друга, есть ли способ повернуть их в определенной степени или, по крайней мере, сделать их вертикальными? Глядя на Do c, я нашел способ поворота меток, но есть ли способ поворота чисел тоже?

Конечный результат, о котором я думаю, примерно такой:

final-result

И если это невозможно, есть ли способ показать числа, указанные только с диапазоном, и скрыть точные координаты x всех точек? (Это именно то поведение, которое я получаю, если использую предварительно заданные числа, например, если ось x находится в диапазоне от 0 до 20, помещает 0, 5, 10, 15 и 20 на ось x.

Но на этой диаграмме я получаю точки из API (живой график), поэтому точки добавляются непрерывно, и по некоторым причинам matplotlib ведет себя по-разному и не устанавливает пределы диапазона, которые я указал на оси x из оси начало. Вместо этого он продолжает помещать координату X всех чисел на оси X, что приводит к их перекрытию.

import requests
import matplotlib.pyplot as plt
from matplotlib import animation

fig = plt.figure()
location_axes = fig.add_subplot(1,1,1)

xs = []
ys = []

def get_current_location(i):
  response = requests.get("http://api.open-notify.org/iss-now.json")
  response_json = response.json()
  if(response.status_code == 200):
    location_axes.clear()
    xs.append(response_json['iss_position']['longitude'])
    ys.append(response_json['iss_position']['latitude'])
    location_axes.scatter(
      xs,
      ys
    )
  else:
    raise ConnectionError("A connection error occured while retrieving the data")

location_axes.set_xlim([-180,180])
location_axes.set_ylim([-90,90])
plt.grid(True)
# plt.xtick(rotation=45)

anim = animation.FuncAnimation(fig, get_current_location, interval=1000)

plt.show()

1 Ответ

2 голосов
/ 02 апреля 2020

Вы можете сделать это следующим образом:

plt.xtick(rotation=45)

Если вы хотите, чтобы он был вертикальным, вы также можете сделать:

plt.xticks(rotation='vertical')

Подробнее о вращении вы можете прочитать в следующая документация:

https://matplotlib.org/3.1.1/gallery/ticks_and_spines/ticklabels_rotation.html

https://kite.com/python/answers/how-to-rotate-axis-labels-in-matplotlib-in-python

Редактировать

После добавления Пожалуйста, обратите внимание, что вы должны сделать следующее, потому что манипуляции, которые вы выполняете sh, выполняются на Axes объекте:

location_axes.tick_params(axis='x', rotation=45)

добавьте это к вашей функции, которую вы вызываете во время анимации:

def get_current_location(i):
  response = requests.get("http://api.open-notify.org/iss-now.json")
  response_json = response.json()
  if(response.status_code == 200):
    location_axes.clear()
    xs.append(response_json['iss_position']['longitude'])
    ys.append(response_json['iss_position']['latitude'])
    location_axes.scatter(
      xs,
      ys
    )
    location_axes.tick_params(axis='x', rotation=45)
  else:
    raise ConnectionError("A connection error occured while retrieving the data")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...