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

Ввод текста в верхнем левом углу графика matplotlib

Как я могу поместить текст в верхний левый (или верхний правый) угол фигуры matplotlib, например. где верхняя левая легенда была бы, или поверх сюжета, но в верхнем левом углу? Например. если это plt.scatter(), то что-то, что было бы в пределах квадрата разброса, помещено в верхний левый угол.

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

спасибо!

4b9b3361

Ответ 1

Вы можете использовать text.

text(x, y, s, fontsize=12)

text координаты могут быть заданы относительно оси, поэтому позиция вашего текста не зависит от размера графика:

Преобразование по умолчанию указывает, что текст находится в координатах данных, в качестве альтернативы вы можете указать текст в осевых координатах (0,0 - нижний левый и 1,1 - верхний правый). Пример ниже помещает текст в центр осей::

text(0.5, 0.5,'matplotlib',
     horizontalalignment='center',
     verticalalignment='center',
     transform = ax.transAxes)

Чтобы предотвратить вмешательство текста в любую точку вашего разброса, сложнее afaik. Более простой способ - установить y_axis (ymax in ylim((ymin,ymax))) на значение, немного превышающее максимальную y-координату ваших точек. Таким образом, у вас всегда будет свободное место для текста.

EDIT: здесь у вас есть пример:

In [18]: f = figure()
In [19]: ax = f.add_subplot(111)
In [20]: scatter([3,5,2,6,8],[5,3,2,1,5])
Out[20]: <matplotlib.collections.CircleCollection object at 0x0000000007439A90>
In [21]: text(0.1, 0.9,'matplotlib', ha='center', va='center', transform=ax.transAxes)
Out[21]: <matplotlib.text.Text object at 0x0000000007415B38>
In [22]:

enter image description here

Параметры ha и va устанавливают выравнивание вашего текста относительно точки вставки. то есть. ha = 'left' - хороший набор, чтобы предотвратить длинный текст, выходящий из левой оси, когда кадр уменьшается (делается уже) вручную.

Ответ 2

Одним из решений было бы использовать функцию plt.legend, даже если вам не нужна фактическая легенда. Вы можете указать размещение окна легенды с помощью клавиши loc keyterm. Более подробную информацию можно найти на этом веб-сайте, но я также привел пример, показывающий, как разместить легенду:

ax.scatter(xa,ya, marker='o', s=20, c="lightgreen", alpha=0.9)
ax.scatter(xb,yb, marker='o', s=20, c="dodgerblue", alpha=0.9)
ax.scatter(xc,yc marker='o', s=20, c="firebrick", alpha=1.0)
ax.scatter(xd,xd,xd, marker='o', s=20, c="goldenrod", alpha=0.9)
line1 = Line2D(range(10), range(10), marker='o', color="goldenrod")
line2 = Line2D(range(10), range(10), marker='o',color="firebrick")
line3 = Line2D(range(10), range(10), marker='o',color="lightgreen")
line4 = Line2D(range(10), range(10), marker='o',color="dodgerblue")
plt.legend((line1,line2,line3, line4),('line1','line2', 'line3', 'line4'),numpoints=1, loc=2) 

Обратите внимание, что поскольку loc=2, легенда находится в верхнем левом углу графика. И если текст перекрывается с графиком, вы можете уменьшить его, используя legend.fontsize, который затем уменьшит условность.