我已经成功地创建了四个子图和两个具有双y轴特征的子图,如下所示。每个子图都有许多不同的图。我想添加一个图例。但是,我无法使用代码来实现。该图如下所示:
我的代码如下:
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()
它创建了许多图例。输出图如下:
答案 0 :(得分:0)
如果未在legend()
函数中提供图例条目,则应将其放置在plot命令中label
条目的之后。否则legend
不知道列出什么。
如果要在每个子图中包含图例,则应在循环中调用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'])
.
.
我的输出是: