2011-08-12 17 views
33

Czy istnieje sposób mówienia pyplot.text() lokalizację jak można z pyplot.legend()?automatycznie ustawić pole tekstowe w matplotlib

Coś podobnego argumentu legenda byłaby doskonała:

plt.legend(loc="upper left") 

Próbuję oznaczyć wątków o różnych osiach za pomocą liter (na przykład „A”, „B”). Sądzę, że musi istnieć lepszy sposób niż ręczne oszacowanie pozycji.

Dzięki

Odpowiedz

20

Nie jestem pewien, czy to był dostępny kiedy pierwotnie wysłane pytanie, ale przy użyciu parametru loc mogą teraz być rzeczywiście używany. Poniżej znajduje się przykład:

import numpy as np 
import matplotlib.pyplot as plt 
from matplotlib.offsetbox import AnchoredText 

# make some data 
x = np.arange(10) 
y = x 

# set up figure and axes 
f, ax = plt.subplots(1,1) 

# loc works the same as it does with figures (though best doesn't work) 
# pad=5 will increase the size of padding between the border and text 
# borderpad=5 will increase the distance between the border and the axes 
# frameon=False will remove the box around the text 

anchored_text = AnchoredText("Test", loc=2) 
ax.plot(x,y) 
ax.add_artist(anchored_text) 

plt.show() 

enter image description here

+1

'AnchoredText' wydaje się nie radzić sobie z' loc = "najlepszym" '? – zyxue

+0

@zyxue: patrz https://github.com/matplotlib/matplotlib/issues/1313 – naught101

31

Wystarczy użyć annotate i określić współrzędne osi. Na przykład, „lewy górny” będzie:

plt.annotate('Something', xy=(0.05, 0.95), xycoords='axes fraction') 

Można również uzyskać hodowcy i określić stałą przesunięcia w punktach:

plt.annotate('Something', xy=(0, 1), xytext=(12, -12), va='top' 
      xycoords='axes fraction', textcoords='offset points') 

Dla dalszych wyjaśnień zobacz przykłady here i bardziej szczegółowe przykłady here .

+0

@Garrett - Dzięki! Powinny teraz zostać naprawione. –