Matplotlib: выравнивание текста по оси тиков



Я хочу отобразить пользовательский текст рядом с осью y моего графика, как в этом минимальном примере:



import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.text(-0.05, 0.5, '$x$')
plt.show()


Горизонтальное выравнивание 0.05 - это то, что я вычисляю методом проб и ошибок.
К сожалению, 0.05 подходит только для одного размера окна графика.



Для размера окна по умолчанию текст находится там, где я хочу:



Введите описание изображения здесь



Но как только я увеличиваю окно сюжета, мой текст теряется в ничейной земле:

Введите описание изображения здесь



Я пытался ax.text(-ax.yaxis.get_tick_padding, 0.5, '$x$'), но заполнение, по-видимому, измеряется в разных единицах.



Как я могу убедиться, что мой текст имеет одинаковое расстояние от оси y для каждого размера окна?

502   1  

1 ответ:

Вы можете использовать ax.annotate вместо ax.text, поскольку это позволяет немного больше свободы. В частности, он позволяет аннотировать точку в некоторой системе координат с смещением текста в это место в разных координатах.

Следующее создало бы аннотацию в позиции (0, 0.5) в системе координат, заданной yaxis_transform, то есть (axes coordinates, data coordinates). Сам текст затем смещается точками -5 из этого места.

import matplotlib.pyplot as plt

fig, ax = plt.subplots()
ax.annotate('$x$', xy=(0, 0.5), xycoords=ax.get_yaxis_transform(),
                   xytext=(-5,0), textcoords="offset points", ha="right", va="center")

plt.show()

Введите описание изображения здесь

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

Comments

    Ничего не найдено.