2017-02-24 51 views
6

Planuję dwie serie czasowe, a obliczenia zmieniają dla nich indeksy.Jak umieścić tekst poza wątkami?

Jak napisać te indeksy dla tych działek poza działką przy użyciu annotation lub text w python?

Poniżej jest mój kod

import matplotlib.pyplot as plt 

obs_graph=plt.plot(obs_df['cms'], '-r', label='Observed') 
plt.legend(loc='best') 
plt.hold(True) 
sim_graph=plt.plot(sim_df['cms'], '-g', label="Simulated") 
plt.legend(loc='best') 
plt.ylabel('Daily Discharge (m^3/s)') 
plt.xlabel('Year') 
plt.title('Observed vs Simulated Daily Discharge') 
textstr = 'NSE=%.2f\nRMSE=%.2f\n'%(NSE, RMSE) 
# print textstr 
plt.text(2000, 2000, textstr, fontsize=14) 
plt.grid(True) 
plt.show() 

Chcę drukować teststr zewnątrz działek.

Here is the plot

files

Odpowiedz

0

Wygląda na to, że tekst jest tam, ale to leży poza granicami rysunku. Zastosowanie subplots_adjust(), aby zrobić miejsce dla tekstu:

import matplotlib.pyplot as plt 

textstr = 'NSE=%.2f\nRMSE=%.2f\n'%(1, 2) 
plt.xlim(2002, 2008) 
plt.ylim(0, 4500) 
# print textstr 
plt.text(2000, 2000, textstr, fontsize=14) 
plt.grid(True) 
plt.subplots_adjust(left=0.25) 
plt.show() 

enter image description here

+0

Nie widziałem tekstu nawet po użyciu "subplots_adjust()". Czy muszę zdefiniować 'xlim' i' ylim'? – dSb

+0

Nie, użyłem ich, aby uzyskać ten sam zakres osi bez danych. Czy widzisz tekst, jeśli uruchomisz mój przykład? Może różne wersje Matplotlib? Używam wersji 1.5.2 (na Pythonie 3, ale to powinno być nieistotne). Możesz także grać z różnymi wartościami 'left',' right', 'top' i' bottom' - może tekst jest gdzieś indziej. – kazemakase

+0

Próbowałem u góry, z lewej, u dołu i z prawej strony, ale nie mogłem znaleźć tekstu. Używam Python 2.7.11 i matplotlib w wersji 1.5.1. Tak, widzę tekst w twoim przykładzie. Przesłałem mój plik do edycji, czy mógłbyś dzierżawić sprawdzić je przy pomocy mojego kodu. – dSb

12

To chyba najlepiej zdefiniować położenie na rysunku współrzędne zamiast koordynuje dane jako że prawdopodobnie nie chcesz, aby tekst, aby zmienić jego położenie, gdy zmiana danych.

we współrzędnych ta może odbywać się albo przez określenie postać przekształcić (fig.transFigure)

plt.text(0.02, 0.5, textstr, fontsize=14, transform=plt.gcf().transFigure) 

lub metodą rysunku zamiast tego osi text.

plt.gcf().text(0.02, 0.5, textstr, fontsize=14) 

W obu przypadkach współrzędne umieścić tekst są współrzędne rysunku, gdzie (0,0) jest dolny lewy i (1,1) jest w prawym górnym rogu rysunku.

Na koniec wciąż możesz chcieć zapewnić dodatkowe miejsce na tekst, aby zmieścił się obok osi, używając do tego celu numeru plt.subplots_adjust(left=0.3).