Как изменить интервал между тиками в matplotlib?
Я хочу построить график с большим количеством тиков на оси X, используя следующий код:
import pylab
N = 100
data = pylab.np.linspace(0, N, N)
pylab.plot(data)
pylab.xticks(range(N)) # add loads of ticks
pylab.grid()
pylab.tight_layout()
pylab.show()
pylab.close()
результирующий сюжет выглядит так:
Как вы можете видеть, ось X беспорядок, потому что метки галочки нанесены с слишком мало пространства между ними или даже перекрытие.
Я хотел бы создать постоянное пространство между каждой меткой тика автоматически, независимо от того, сколько тиков есть. Итак, я как увеличить пространство между отдельными тиками, таким образом, потенциально увеличивая "длину" участка.
обратите внимание, что метки могут быть строки переменной длины.
то, что я нашел до сих пор все, о расстояние между осью и метками (это не то, что я хочу),галочку частоту (который я уже могу сделать) и параметры галочку (которые, похоже, не имеют никаких вариантов для интервал.)
Я могу изменить размер фигуры вручную с помощью matplotlib.pyplot.figure(figsize=(a, b))
, но для этого потребуется знание расстояния по умолчанию между тиками (насколько я могу судить, его нет) и наибольшей ширины (в дюймах) метки тика, которую я понятия не имею, как измерить, так что это не вариант, на мой взгляд.
что я могу сделать, чтобы увеличить интервал между тиками? Я в порядке с получением довольно длинного изображения.
2 ответов
расстояние между ticklabels определяется исключительно пространство между засечками на осях. Поэтому единственный способ получить больше пространства между заданными метками-сделать оси больше.
чтобы определить пространство, необходимое для того, чтобы метки не перекрывались, можно найти самую большую метку и умножить ее длину на количество меток. Затем можно адаптировать поле вокруг осей и установить вычисленный размер в качестве новой фигуры размер.
import numpy as np
import matplotlib.pyplot as plt
N = 150
data = np.linspace(0, N, N)
plt.plot(data)
plt.xticks(range(N)) # add loads of ticks
plt.grid()
plt.gca().margins(x=0)
plt.gcf().canvas.draw()
tl = plt.gca().get_xticklabels()
maxsize = max([t.get_window_extent().width for t in tl])
m = 0.2 # inch margin
s = maxsize/plt.gcf().dpi*N+2*m
margin = m/plt.gcf().get_size_inches()[0]
plt.gcf().subplots_adjust(left=margin, right=1.-margin)
plt.gcf().set_size_inches(s, plt.gcf().get_size_inches()[1])
plt.savefig(__file__+".png")
plt.show()
обратите внимание, что если фигура, показанная в окне построения, больше экрана, она будет снова уменьшена, поэтому измененный размер отображается только в новом размере при сохранении. Или можно включить его в какое-либо окно с полосами прокрутки, как показано в этом вопросе: полоса прокрутки на Matplotlib показывает страницу
вы можете использовать следующее, чтобы повернуть метки и сделать шрифт меньше:
ax.set_xticklabels(rotation = (45), fontsize = 10, va='bottom', ha='left')