Cla*_*dia 4 python plot matplotlib
我在同一张图中绘制了几条线,我想根据其内容命名这组线。在这些行上,我还没有打算用误差线绘制平均值。但是出现了两个主要问题:
1)我的图例未按我的预期出现(即使试图在图的范围之外绘制一个额外的点,我也无法给他们起个名字-解决方法)
2)具有平均值和误差线的图不重叠。有时它在其他曲线的前面,有时在其他曲线的后面。
我应该怎么做才能将其修复?我可以在Matlab中做(对于Matlab同样是问题),但找不到python的答案
。
这是我的例行情节的一部分:
UYavg = np.nanmean(UYbvall,0)
yerr = np.nanstd(UYbvall,0)
plt.figure()
for i in range(71):
plt.plot(LTbvall[i],UYbvall[i],'r-')
l1 = plt.plot([-2,-1],[1,2],'r-')
l2 = plt.plot(LTbvall[3],UYavg,'b*-')
plt.errorbar(LTbvall[2],UYavg, yerr = yerr,ecolor='b')
plt.xlabel('Tempo (LT)')
plt.xlim(0,24)
plt.ylabel('Uy (m/s)')
plt.title('Vento neutro zonal calculado pelo modelo NWM (BV)')
plt.legend((l1,l2),('Perfis COPEX','Media'), loc = 'best')
Run Code Online (Sandbox Code Playgroud)
编辑:答案必须类似于情节中的多条线或make-custom-legend-in-matplotlib
我发现最简单的解决方案是在创建时给线标签。尝试以下操作,您将在图例中看到两行内容:
import matplotlib.pyplot as plt
plt.plot([1, 2, 3], color='red', label='line one')
plt.plot([4, 6, 8], color='blue', label='line two')
plt.legend()
plt.show()
Run Code Online (Sandbox Code Playgroud)
好吧,基于另一个问题(使matplotlib生成自定义传奇和强制使用matplotlib渲染错误栏),我理解正确。第二个错误应该不会发生,我认为zorder选项可能存在错误。如果我只为错误栏选择较大的数字,则错误栏的图将继续隐藏。因此,我必须为for循环中的行的zorder设置一个负数。
解决问题的行是:
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
for i in range(71):
ax.plot(LTbvall[i],UXbvall[i],'-',color ='#C0C0C0',label = 'Perfis COPEX',zorder = -32)
ax.plot(LTbvall[3],UXavg,'b*-', label = u'média')
ax.errorbar(LTbvall[3],UXavg, yerr = yerr,ecolor='b',zorder = 10)
#Get artists and labels for legend and chose which ones to display
handles, labels = ax.get_legend_handles_labels()
display = (0,71)
ax.set_xlabel('Tempo (LT)')
ax.set_xlim(0,24)
ax.set_ylabel('Ux (m/s)')
ax.set_title('Vento neutro meridional calculado pelo modelo NWM (BV)')
ax.legend([handle for i,handle in enumerate(handles) if i in display],
[label for i,label in enumerate(labels) if i in display], loc = 'best')
fig.savefig(path[9] + 'Uxbvall_LT_nwm')
plt.clf()
plt.gcf()
plt.close()
Run Code Online (Sandbox Code Playgroud)
输出如下: