2013-01-15 4 views
20

У меня есть следующий пример кода:Single легенда для нескольких осей

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) 

сюжетные имеет две оси с различными весами на одной и той же сюжетные, и я хочу только одну легенду для обеих осей. Я попробовал вышеуказанный код, и он не работает, и он дает только детали от ax2. Есть идеи?

+0

См http://stackoverflow.com/questions/5484922/secondary- axis-with-twinx-how-to-add-to-legend для того же вопроса. И дает также одно и то же решение. – joris

+1

Да, да. Мой поиск на SO не вызвал его. Кроме того, в этом вопросе не говорится, что для названия требуется отдельная легенда. Но спасибо, что сообщили мне. Мне было интересно, есть ли что-то более элегантное, что я придумал. Может быть, мы должны добавить метод ax1.combine_legends (ax2), который делает это? – arun

ответ

43

Я понял это решение, которое работает! Есть ли лучший способ, чем это?

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

это работает для меня! – gnr

1

Это действительно старое сообщение, но я думаю, что я нашел более простой способ, позволяющий контролировать больше.

Здесь (Matplotlib версия '1.5.3.) На 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()

Смежные вопросы