Matplotlib: назначить легенду для разных фигур - PullRequest
0 голосов
/ 25 апреля 2018

Внутри цикла я вычисляю некоторые вещи, а затем хочу построить их на двух разных фигурах. Я настроил цифры как

susc_comp, (ax1,ax2) = plt.subplots( 2, 1, sharex=True, sharey='none', figsize=(8.3,11.7)) 
cole_cole, (ax3) = plt.subplots( 1, 1, sharex='none', sharey='none', figsize=(8.3,11.7))
for j,temp in enumerate(indexes_T[i]):

     Calculate and plot in the corresponding ax1,ax2,ax3

plt.legend(loc=0, fontsize='small', numpoints = 1, ncol=(len(indexes_T[i]))/2, frameon=False)
susc_comp.savefig('suscp_components'+str(field)+'Oe.png', dpi=300)
cole_cole.savefig('Cole_Cole'+str(field)+'Oe.png', dpi=300)

Но я получаю легенду только на рисунке sus_comp (это одна и та же легенда для обеих фигур). Как выбрать рисунок и добавить к каждому из них легенду?

Большое спасибо!

1 Ответ

0 голосов
/ 25 апреля 2018

Вы можете позвонить figure.legend напрямую (хотя я думаю, что это может иметь меньше функциональности, чем plt.legend). Поэтому я бы сделал это по-другому.

Вопрос гласит, что обе легенды одинаковы. Кроме того, вторая фигура имеет только 1 ось. Поэтому одним из решений было бы получить маркеры и метки ax3, а затем вручную применить их к обеим фигурам. Ниже приведен упрощенный пример:

import matplotlib.pyplot as plt

susc_comp, (ax1, ax2) = plt.subplots(1,2)
cole_cole, ax3 = plt.subplots()

ax1.plot([1,2,3], label="Test1")
ax2.plot([3,2,1], label="Test2")

ax3.plot([1,2,3], label="Test1")
ax3.plot([3,2,1], label="Test2")

handles, labels = ax3.get_legend_handles_labels()

ax2.legend(handles, labels, loc=1, fontsize='small', numpoints = 1)
ax3.legend(handles, labels, loc=1, fontsize='small', numpoints = 1)

plt.show()

Это дает следующие 2 цифры:

enter image description here

enter image description here

...