如何制作子图以显示图例列表

时间:2018-07-20 06:16:17

标签: python python-3.x matplotlib

G =  [500, 600]    
V_cel =  [[0.5061622703106294, 0.018464827637910804], [0.5109806104259279, 0.020619347874867924]]    
I_cel =  [[0.         0.35938438]     [0.         0.4335135 ]]    
P_cel =  [[0.0, 0.006635970540228099], [0.0, 0.008938765665079252]]
plt.figure(1,figsize=(10,3))
plt.subplot(121)
for i in G:
    for t in list(zip(V_cel, I_cel)):  
        plt.plot(*t, label='%s W/m$^{2}$' % i)        
    plt.legend()
plt.axis([0, 0.7, 0, 0.9])    
plt.subplot(122)
for i in G:
    for t in list(zip(V_cel, P_cel)):  
        plt.plot(*t, label='%s W/m$^{2}$' % i)        
    plt.legend()
plt.axis([0, 0.7, 0, 0.4])
plt.suptitle("I-V & P-V curves of PV cell for given STC data", fontsize=20)
plt.rc('font',family='Times New Roman')
plt.savefig('STC_I_V_curve')
plt.show()

**输出为:我绘制了两个子图,这很好。问题出在图例上。两者都应仅显示十个图例的列表。因为V_celI_cel都有[10个列表,每个列表有1000个值]。相反,两个图都显示了100个图例。请参阅所附的图。我希望它仅显示十个图例[100, 200, 300, 400, 500, 600, 700, 800, 900, 1000]。某些错误在哪里。 enter image description here

**包含根据SpghttCd代码所做的更改后的输出,该输出被接受为答案 enter image description here

1 个答案:

答案 0 :(得分:2)

您可以遍历G元素列表和数据特征数组-这是一个循环。

假设G是您的传入能量列表,并带有一些自行设计的数据数组,则您的图可能是可创建的,如:

import numpy as np
import matplotlib.pyplot as plt

fig, axs = plt.subplots(1, 2, figsize=(10, 3))
for g, v, i, p in zip(G, V_cel, I_cel, P_cel):
    axs[0].plot(v, i, label='%s W/m$^{2}$' % g)
    axs[1].plot(v, p)

fig.legend()
axs[0].axis([0, 0.7, 0, 0.9])
axs[1].axis([0, 0.7, 0, 0.9])

enter image description here

plt.suptitle("I-V & P-V curves of PV cell for given STC data", fontsize=20)
plt.tight_layout(rect=[0, 0, .85, .9])