Выравнивание вращающихся xticklabels с их соответствующими xticks
Проверьте ось x на рисунке ниже. Как перемещать метки немного влево, чтобы они совпадали с соответствующими тиками?
Я вращаю метки, используя:
ax.set_xticks(xlabels_positions)
ax.set_xticklabels(xlabels, rotation=45)
Но, как вы можете видеть, вращение центрируется на середине текстовых меток. Кажется, что они смещены вправо.
Я попытался использовать это вместо:
ax.set_xticklabels(xlabels, rotation=45, rotation_mode="anchor")
... но он не делает то, что я хотел. И "anchor"
кажется единственным значением, разрешенным для параметра rotation_mode
.
![Example]()
Ответы
Ответ 1
Вы можете установить горизонтальное выравнивание меток, см. пример ниже. Если вы представляете прямоугольную рамку вокруг повернутой метки, на какой стороне прямоугольника вы хотите выровняться с контрольной точкой?
Учитывая ваше описание, вы хотите: ha = 'right'
n=5
x = np.arange(n)
y = np.sin(np.linspace(-3,3,n))
xlabels = ['Ticklabel %i' % i for i in range(n)]
fig, axs = plt.subplots(1,3, figsize=(12,3))
ha = ['right', 'center', 'left']
for n, ax in enumerate(axs):
ax.plot(x,y, 'o-')
ax.set_title(ha[n])
ax.set_xticks(x)
ax.set_xticklabels(xlabels, rotation=40, ha=ha[n])
![enter image description here]()
Ответ 2
Поворот ярлыков, безусловно, возможен. Обратите внимание, что это уменьшает читаемость текста. Один из альтернатив заключается в замене позиций ярлыков с помощью следующего кода:
import numpy as np
n=5
x = np.arange(n)
y = np.sin(np.linspace(-3,3,n))
xlabels = ['Long ticklabel %i' % i for i in range(n)]
fig, ax = plt.subplots()
ax.plot(x,y, 'o-')
ax.set_xticks(x)
labels = ax.set_xticklabels(xlabels)
for i, label in enumerate(labels):
label.set_y(label.get_position()[1] - (i % 2) * 0.075)
![введите описание изображения здесь]()
Дополнительные сведения и альтернативы см. в этот пост в моем блоге