Подтвердить что ты не робот

Как я могу переместить только галочку (без перемещения соответствующего тика)?

Я использую 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)

Таким образом, мы можем использовать небольшие тики, чтобы пометить метки меток в любом месте.

Спасибо всем сердечным!

4b9b3361

Ответ 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 и позволяет большинству текстов хорошо вписываться без перекрытия.
Если они все еще перекрываются - это означает, что эти клещи очень близки друг к другу. И тогда возникает вопрос, насколько хорошо бы два клещей так близко друг к другу сделали бы со зрителем вашего заговора?