Как я могу переместить только галочку (без перемещения соответствующего тика)?
Я использую matplotlib для создания диаграммы, и я использую set_ticks
и set_ticklabels
, чтобы выделить несколько важных значений по оси x. Но некоторые из этих ярлыков слишком близки и перекрываются. Но я не знаю, как перемещать эти ярлыки, не перемещая тики.
Вот иллюстрация:
![overlapped tick labels]()
Я пробовал несколько трюков, но не смог, и я не нашел ответа на этот вопрос в Интернете. Любая помощь, спасибо.
Обновление:
Исходный код:
fig = mpl.figure( figsize=(3, 3) ) # force figsize here to reproduce the problem.
ax = fig.add_subplot(1, 1, 1, frameon=False)
ax.set_xlim(-0.015, 1.515)
ax.set_ylim(-0.01, 1.01)
ax.set_xticks([0, 0.3, 0.4, 1.0, 1.5])
ax.grid(True)
mpl.show()
И результат:
![enter image description here]()
Я пробовал несколько трюков, и лучший из них:
fig = mpl.figure( figsize=(3, 3) )
ax = fig.add_subplot(1, 1, 1, frameon=False)
ax.set_xlim(-0.015, 1.515)
ax.set_ylim(-0.01, 1.01)
ax.set_xticks([0, 0.3, 0.4, 1.0, 1.5])
ax.set_xticklabels([0.0, "", "", 1.0, 1.5])
ax.set_xticks([0.35], minor=True)
ax.set_xticklabels(["0.3 0.4"], minor=True)
ax.grid(True)
mpl.show()
![enter image description here]()
Но есть незначительный тик в x = 0,35, и я не знаю, как его удалить.
Обновление 2:
ОК, я обнаружил, как сам удалить небольшие тики:
for line in ax.xaxis.get_minorticklines():
line.set_visible(False)
Таким образом, мы можем использовать небольшие тики, чтобы пометить метки меток в любом месте.
Спасибо всем сердечным!
Ответы
Ответ 1
Из вашего комментария "отметьте несколько важных значений по оси х". Я думаю, что вы не должны менять символы и метки, а добавлять вертикальные строки с соответствующей аннотацией.
Это означает, что сетка, по которой ваши данные остаются регулярными, позволяет вам различать важные точки, вы также можете легко добавить числовые значения.
Пример
import pylab as py
# Plot a sinc function
delta=2.0
x=py.linspace(-10,10,100)
y=py.sinc(x-delta)
# Mark delta
py.axvline(delta,ls="--",color="r")
py.annotate(r"$\delta$",xy=(delta+0.2,-0.2),color="r",size=15)
py.plot(x,y)
![Simple sinc and annotation]()
Ответ 2
Для кого-то, кто ищет ответ на исходный вопрос:
Это может быть вариант изменения выравнивания метки tick_label.
Это подробно объясняется в example на веб-странице matplotlib. В основном в приведенном выше случае можно использовать
ax.get_xaxis().majorTicks[1].label1.set_horizontalalignment('right')
ax.get_xaxis().majorTicks[2].label1.set_horizontalalignment('left')
для перемещения ярлыков друг от друга
Ответ 3
Как строгий ответ на заданный вопрос, вы можете получить конкретный тик и использовать set_pad()
ax.get_xaxis().majorTicks[2].set_pad()
Я думаю, что лучшей практикой было бы использовать autofmt_xdate
fig = plt.figure()
fig.autofmt_xdate()
Которая хорошо меняет ярлыки xtick и позволяет большинству текстов хорошо вписываться без перекрытия.
Если они все еще перекрываются - это означает, что эти клещи очень близки друг к другу. И тогда возникает вопрос, насколько хорошо бы два клещей так близко друг к другу сделали бы со зрителем вашего заговора?