Как изменить интервал между тиками в 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()

результирующий сюжет выглядит так:

plot

Как вы можете видеть, ось 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()

enter image description here

обратите внимание, что если фигура, показанная в окне построения, больше экрана, она будет снова уменьшена, поэтому измененный размер отображается только в новом размере при сохранении. Или можно включить его в какое-либо окно с полосами прокрутки, как показано в этом вопросе: полоса прокрутки на Matplotlib показывает страницу


вы можете использовать следующее, чтобы повернуть метки и сделать шрифт меньше:

ax.set_xticklabels(rotation = (45), fontsize = 10, va='bottom', ha='left')