Umieszczenie tekstu w lewym górnym rogu wykresu matplotlib

Jak mogę umieścić tekst w lewym górnym (lub prawym górnym) rogu figury matplotlib, np. gdzie byłaby lewa górna legenda, lub na górze wykresu, ale w lewym górnym rogu? Np. jeśli jest to plt.scatter (), a następnie coś, co byłoby w kwadracie scatter, umieścić w lewym górnym rogu.

Chciałbym to zrobić bez idealnej znajomości skali wykresu punktowego, ponieważ zmieni się on z zbioru danych na zbiór danych. Chcę, żeby tekst był mniej więcej w lewym górnym rogu, lub mniej więcej w prawym górnym rogu. Przy pozycjonowaniu typu legenda nie powinna ona pokrywać się z żadnymi punktami punktowymi.

Dzięki!

Author: user248237dfsf, 2011-12-13

2 answers

Możesz użyć text.

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

text współrzędne mogą być podane względem osi, więc pozycja tekstu będzie niezależna od wielkości Wykresu:

Domyślna transformacja określa, że tekst jest w koordach danych, alternatywnie można określić tekst w koordach osi (0,0 jest w lewym dolnym rogu i 1,1 jest górny-prawy). Poniższy przykład umieszcza tekst w środku z osi::

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

Aby tekst nie przeszkadzał w jakimkolwiek punkcie Twój rozrzut jest trudniejszy afaik. Łatwiejszą metodą jest ustawienie y_axis (ymax w ylim((ymin,ymax))) na wartość nieco wyższą niż maksymalna współrzędna y Twoich punktów. W ten sposób zawsze będziesz mieć wolne miejsce na tekst.

EDIT: tutaj masz przykład:

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]:

Tutaj wpisz opis obrazka

Parametry ha i va ustawiają wyrównanie tekstu względem punktu wstawiania. ie. ha= 'left' jest dobrym zestawem, aby zapobiec wychodzeniu długiego tekstu z lewej osi, gdy ramka jest zmniejszona (wykonana węższy) ręcznie.

 115
Author: joaquin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-25 05:27:56

Jednym z rozwiązań byłoby użycie funkcji plt.legend, nawet jeśli nie chcesz mieć prawdziwej legendy. Możesz określić położenie pola legendy za pomocą loc keyterm. Więcej informacji można znaleźć na tej stronie , ale dodałem również przykład pokazujący, jak umieścić legendę:

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) 

Zwróć uwagę, że ponieważ loc=2, legenda znajduje się w lewym górnym rogu fabuły. A jeśli tekst pokrywa się z wykresem, możesz go zmniejszyć za pomocą legend.fontsize, co spowoduje, że legenda:

 6
Author: cosmosis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-13 00:16:33