Я не могу понять, как повернуть текст по оси X. Это временная метка, поэтому по мере увеличения количества выборок они становятся все ближе и ближе, пока не перекрываются. Я хотел бы повернуть текст на 90 градусов, чтобы по мере приближения образцов друг к другу они не перекрывались.
Ниже то, что у меня есть, работает нормально, за исключением того, что я не могу понять, как повернуть текст по оси X.
import sys
import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import datetime
time = [datetime.datetime.fromtimestamp(float(i.split(',')[0].strip())) for i in values[1:]] delay = [float(i.split(',')[1].strip()) for i in values[1:]]
plt.plot(time, delay) plt.grid(b='on')
plt.savefig('test.png')
Переведено автоматически
Ответ 1
У меня это работает:
plt.xticks(rotation=90)
Ответ 2
Здесь много "правильных" ответов, но я добавлю еще один, так как я думаю, что некоторые детали упущены из нескольких. OP запросил поворот на 90 градусов, но я изменю на 45 градусов, потому что, когда вы используете угол, отличный от нуля или 90, вам также следует изменить выравнивание по горизонтали; в противном случае ваши метки будут смещены от центра и немного вводят в заблуждение (и я предполагаю, что многие люди, которые приходят сюда, хотят повернуть оси на что-то другое, чем 90).
Самый простой / Наименьший код
Вариант 1
plt.xticks(rotation=45, ha='right')
Как упоминалось ранее, это может быть нежелательно, если вы предпочитаете объектно-ориентированный подход.
Вариант 2
Еще один быстрый способ (он предназначен для объектов даты, но, похоже, работает с любой меткой; сомневаюсь, что это рекомендуется):
fig.autofmt_xdate(rotation=45)
fig обычно вы получаете из:
fig = plt.gcf()
fig = plt.figure()
fig, ax = plt.subplots()
fig = ax.figure
Объектно-ориентированный / Имеет дело непосредственно с ax
Если вы хотите получить список меток с текущего графика:
# Unfortunately you need to draw your figure first to assign the labels, # otherwise get_xticklabels() will return empty strings. plt.draw() ax.set_xticks(ax.get_xticks()) ax.set_xticklabels(ax.get_xticklabels(), rotation=45, ha='right')
Как и выше, в более поздних версиях Matplotlib (3.5+) вы можете просто использовать set_xticks самостоятельно:
Этот параметр прост, но AFAIK вы не можете настроить выравнивание метки по горизонтали таким образом, поэтому другой вариант может быть лучше, если ваш угол не равен 90.
Как описано здесь, в matplotlib.pyplotfigure классе существует существующий метод, который автоматически поворачивает даты соответствующим образом для вашего рисунка.
Вы можете вызвать это после построения графика ваших данных (т.е.ax.plot(dates,ydata) :
fig.autofmt_xdate()
Если вам нужно дополнительно отформатировать метки, перейдите по ссылке выше.
Объекты, отличные от datetime
Согласно комментарию languitar, метод, который я предложил для не-datetime xticks, не будет корректно обновляться при масштабировании и т.д. Если это не datetime объект, используемый в качестве ваших данных по оси x, вам следует следовать ответу Tommy:
for tick in ax.get_xticklabels(): tick.set_rotation(45)
Ответ 4
Попробуйте pyplot.setp. Я думаю, вы могли бы сделать что-то вроде этого: