Расположите шрифт относительно оси с помощью ax.text, matplotlib - PullRequest
0 голосов
/ 12 июля 2020

Я не уверен, как правильно позиционировать шрифт относительно объекта оси с помощью matplotlib.

Пример:

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(10, 4), dpi=100)
x = [1, 2]
y = [3, 4]

y_loc = 4.1
x_loc = 0.95
fs = 12
ax = axes[0]
ax.plot(x, y)
_ = ax.text(x=x_loc, y=y_loc, s="Plot 1", fontsize=fs)

ax = axes[1]
ax.plot(x, y)
_ = ax.text(x=x_loc, y=y_loc, s="Plot 2", fontsize=fs)

ax = axes[2]
_ = ax.plot(x, y)
_ = ax.text(x=x_loc, y=y_loc, s="Plot 3", fontsize=fs)

Что дает:

enter image description here

The use of values:

y_loc = 4.1
x_loc = 0.95

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

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

1 Ответ

1 голос
/ 12 июля 2020

По умолчанию, ax.text использует «координаты данных» , т.е. с x и y, как показано на отметках осей. Для построения графика относительно прямоугольника, определяемого осями, используйте transform=ax.transAxes. Здесь 0,0 будет точкой слева внизу, а 1,1 - точкой вверху справа. (Этот вид координат также очень полезен при позиционировании легенды .)

from matplotlib import pyplot as plt
import numpy as np

fig, axes = plt.subplots(nrows=1, ncols=3, figsize=(10, 4), dpi=100)

for ind, ax in enumerate(axes):
    ax.plot(np.random.randint(0, 10, 2), np.random.randint(0, 10, 2))
    ax.text(x=0, y=1.05, s=f"Plot {ind+1}", fontsize=12, transform=ax.transAxes)
plt.show()

пример сюжета

...