2013-01-15 19 views
20

eksenleri Aşağıdaki örnek kodu vardır:tek bir açıklama

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) 

alt plan aynı subplot farklı ölçeklerde iki eksene sahiptir ve her iki eksen için tek göstergeyi istiyoruz. Yukarıdaki kodu denedim ve çalışmaz ve sadece ax2'den detaylar üretir. Herhangi bir fikir?

+0

Bkz http://stackoverflow.com/questions/5484922/secondary- aynı soru için eksen-ile-twinx-nasıl-add-to-efsane. Ve aynı çözümü de veriyor. – joris

+1

Evet, öyle. SO üzerinde yaptığım arama onu getirmedi. Ayrıca, soru başlıkta tek bir efsaneye ihtiyaç olduğunu belirtmez. Ama bildiğin için teşekkürler. Acaba ben neyle geldiğini daha zarif bir şey olup olmadığını merak ediyordum. Belki bunu yapan bir ax1.combine_legends (ax2) yöntemi eklemeliyiz? – arun

cevap

43

Çalıştığım bir çözüm buldum! Bundan daha iyi bir yolu var mı?

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

bu benim için çalışıyor! – gnr

1

Bu gerçekten eski bir yazıdır, ancak daha fazla denetim olanağı sağlayan daha kolay bir yol buldum. İşte

o (. Matplotlib versiyonu '1.5.3') python3.5 üzerindedir:

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()