2013-01-15 14 views
20

Ho il seguente codice esempio:legenda singolo per più assi

fig1.suptitle('Test') 
ax1 = fig1.add_subplot(221) 
ax1.plot(x,y1,color='b',label='aVal') 
ax2 = ax1.twinx() 
ax2.plot(x,y2,color='g',label='bVal') 
ax2.grid(ls='--', color='black') 
legend([ax1,ax2], loc=2) 

La sottotrama ha due assi con scale diverse sulla stessa sottotrama e voglio solo una legenda per entrambi gli assi. Ho provato il codice sopra e non funziona e produce solo dettagli da ax2. Qualche idea?

+0

Vedi http://stackoverflow.com/questions/5484922/secondary- axis-with-twinx-how-to-add-to-legend per la stessa domanda. E dà anche la stessa soluzione. – joris

+1

Sì, lo fa. La mia ricerca su SO non l'ha fatto apparire. Inoltre, la domanda non dice che ha bisogno di una singola legenda sul titolo. Ma grazie per avermelo detto. Mi stavo chiedendo se ci fosse qualcosa di più elegante di quello che mi è venuto in mente. Forse dovremmo aggiungere un metodo ax1.combine_legends (ax2) che fa questo? – arun

risposta

43

L'ho trovato una soluzione che funziona! C'è un modo migliore di questo?

fig1.suptitle('Test') 
ax1 = fig1.add_subplot(221) 
ax1.plot(x,y1,color='b',label='aVal') 
ax2 = ax1.twinx() 
ax2.plot(x,y2,color='g',label='bVal') 
ax2.grid(ls='--', color='black') 
h1, l1 = ax1.get_legend_handles_labels() 
h2, l2 = ax2.get_legend_handles_labels() 
ax1.legend(h1+h2, l1+l2, loc=2) 
+0

questo funziona per me! – gnr

1

Questo è davvero un vecchio post, ma penso di aver trovato un modo più semplice che consente un maggiore controllo.

Eccolo (matplotlib versione '1.5.3'.) Su python3.5:

import matplotlib.pyplot as plt 
fig, ax1 = plt.subplots() 
plt.suptitle('Test') 
ax2 = ax1.twinx() 
a, = ax1.plot([1, 2, 3], [4, 5, 6], color= 'blue', label= 'plt1') 
b, = ax2.plot([7, 8, 9],[10, 11, 12], color= 'green', label= 'plt2') 
p = [a, b] 
ax1.legend(p, [p_.get_label() for p_ in p], 
      loc= 'upper center', fontsize= 'small') 

show()

Problemi correlati