在Python for loop中,如何为图创建图例?

时间:2018-08-23 04:57:26

标签: python python-3.x matplotlib

我已经成功地创建了四个子图和两个具有双y轴特征的子图,如下所示。每个子图都有许多不同的图。我想添加一个图例。但是,我无法使用代码来实现。该图如下所示:

enter image description here

我的代码如下:

fig, axs = plt.subplots(2,2,figsize=(17,10))
fig.legend(loc="center right", fontsize=13,fancybox=True, framealpha=1, shadow=True, borderpad=1)    
plt.rc('font',family='Times New Roman')
.
.
for i,j in zip(IV_start_index,IV_start_index[1:]):  # This is simple code to access present and next element in a list    
    axs[0][0].plot(module_allData_df['Time'].iloc[mpp_index],pmpp_theo,'bs',label="Theoretical")
    axs[0][0].plot(module_allData_df['Time'].iloc[mpp_index],pmpp_act,'rd',label="Actual")
    .  
    .  
    plt.suptitle('A NIST Module %s power loss analysis'%(module_allData_df['Time'].loc[i].strftime('%Y-%m-%d')),fontsize=18) # 
    plt.savefig('All_day_power_loss')

输出为:

No handles with labels found to put in legend.

您能帮我更正我的代码吗?

更正: 我确实更改了如下代码。

for i,j in zip(IV_start_index,IV_start_index[1:]):  # This is simple code to access present and next element in a list    
        axs[0][0].plot(module_allData_df['Time'].iloc[mpp_index],pmpp_theo,'bs',label="Theoretical")
        axs[0][0].plot(module_allData_df['Time'].iloc[mpp_index],pmpp_act,'rd',label="Actual")
        axs[0][0].legend()

它创建了许多图例。输出图如下:

enter image description here

2 个答案:

答案 0 :(得分:0)

  1. 如果未在legend()函数中提供图例条目,则应将其放置在plot命令中label条目的之后。否则legend不知道列出什么。

  2. 如果要在每个子图中包含图例,则应在循环中调用axs[i][j].legend()(或为每个子图手动调用axs[0][0].legend()axs[0][1].legend(),...当然)。关键是:fig.legend()图级别的图例,即所有子图一起的一个图例。应该在循环外调用一次。

答案 1 :(得分:0)

经过一系列的尝试,我对代码进行了以下操作:

for i,j in zip(IV_start_index,IV_start_index[1:]):  # This is simple code to access present and next element in a list    
    axs[0][0].plot(module_allData_df['Time'].iloc[mpp_index],pmpp_theo,'bs')
    axs[0][0].plot(module_allData_df['Time'].iloc[mpp_index],pmpp_act,'rd')
    axs[0][0].legend(['Theoretical','Actual'])
    .
    .

我的输出是:

enter image description here