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 для каждого размера окна?
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