2013-02-26 11 views
6

W matplolib dla wykresu linii czasu mogę ustawić na osi Y różne wartości po lewej i wykonać kolejną oś y w prawo z inną skalą?Diagramy matplotlib z 2-osią

używam to:

import matplotlib.pyplot as plt 

plt.axis('normal') 
plt.axvspan(76, 76, facecolor='g', alpha=1) 
plt.plot(ts, 'b',linewidth=1.5) 
plt.ylabel("name",fontsize=14,color='blue') 
plt.ylim(ymax=100) 
plt.xlim(xmax=100) 
plt.grid(True) 
plt.title("name", fontsize=20,color='black') 
plt.xlabel('xlabel', fontsize=14, color='b') 
plt.show() 

Mogę dać 2 oś y w tej działce?

W selektora przęsła:

plt.axvspan(76, 76, facecolor='g', alpha=1) 

chcę wyprostować tekst scharakteryzować ten przedział na przykład „To jest selektor rozpiętość” jak mogę to zrobić?

+0

możliwy duplikat [matplotlib: nakładki fabularne z różnymi skalami?] (http://stackoverflow.com/questions/7733693/matplotlib-overlay-plots-with-different-scales) – tacaswell

+0

nie, nie na tym samym wykresie chcę 2 oś y po lewej stronie i prosto z działki –

+0

, więc chcesz mieć wykres z 4 (?!) oddzielną osią Y? Przewiń w dół do drugiej połowy zaakceptowanej odpowiedzi. – tacaswell

Odpowiedz

15

Chcesz twinxexample. Istotą jeśli jest to:

ax = plt.gca() 
ax2 = ax.twinx() 

Następnie można wykreślić na pierwszych osiach z

ax.plot(...) 

a drugi z

ax2.plot(...) 

W twoim przypadku (chyba) chcesz:

import matplotlib.pyplot as plt 

ax = plt.gca() 
ax2 = ax.twinx() 
plt.axis('normal') 
ax2.axvspan(74, 76, facecolor='g', alpha=1) 
ax.plot(range(50), 'b',linewidth=1.5) 
ax.set_ylabel("name",fontsize=14,color='blue') 
ax2.set_ylabel("name2",fontsize=14,color='blue') 
ax.set_ylim(ymax=100) 
ax.set_xlim(xmax=100) 
ax.grid(True) 
plt.title("name", fontsize=20,color='black') 
ax.set_xlabel('xlabel', fontsize=14, color='b') 
plt.show() 
+1

Co robisz z legendą? Miałem moje ułożone jeden na drugim – raphael

+1

@faphael Jawnie przekazuj pozycję do wywołania legendy, aby je usunąć. Nie sądzę, że "najlepszy" algorytm umieszczania uważa artystów za inne osie. – tacaswell