繁体   English   中英

向 matplotlib 图中添加图例信息

[英]Adding legend information to matplotlib plot

我创建了一个置信区间图,它完全按照我想要的方式工作:

month = ['Nov-20', 'Dec-20', 'Jan-21', 'Feb-21', 'Mar-21', 'Apr-21', 'May-21', 'Jun-21', 'Jul-21', 'Aug-21', 'Sep-21', 'Oct-21']
x = [0.85704744, 0.74785299, 0.68103776, 0.69793547, 0.8396294 ,
       0.25560889, 0.37400785, 0.00742866, 0.84700224, 0.95142221,
       0.08544432, 0.09068883]
y = [0.09448781, 0.69683102, 0.96261431, 0.93635227, 0.31503366,
       0.38335671, 0.24244469, 0.36712811, 0.22270387, 0.01506295,
       0.78433   , 0.38408096]
z = [0.84585527, 0.59615266, 0.60263581, 0.26366399, 0.42948978,
       0.18138516, 0.54841131, 0.65201558, 0.03089001, 0.20581638,
       0.57586628, 0.33622286]

fig, ax = plt.subplots(figsize=(17,8))
ax.plot(month, z)
ax.fill_between(month, x, y, color='b', alpha=.3)
ax.hlines(y=0.50, xmin=0, xmax=(len(month)), colors='orange', linestyles='--', lw=2, label="Target: 50%")
plt.xlabel('Month')
plt.ylabel('Target %')
plt.rcParams["font.size"] = "20"
plt.ylim((0.1, 1.0))
plt.legend(bbox_to_anchor=(1.04,0.5), loc="center left", borderaxespad=0)
plt.title("Target Forecast Nov20 - Nov21")

plt.show()
plt.close()

在此处输入图片说明

但是,我想在图例中添加以下内容:

  • 蓝线是“可能的预测”的指标
  • 蓝色fill_between是置信区间的指标

我确实阅读了这个 matplotlib 文档,所以我尝试了:

fig, ax = plt.subplots(figsize=(17,8))
prob, = ax.plot(month, z)
btwn, = ax.fill_between(month, x, y, color='b', alpha=.3)
tgt, = ax.hlines(y=0.50, xmin=0, xmax=(len(month)), colors='orange', linestyles='--', lw=2, label="Target: 50%")
plt.xlabel('Month')
plt.ylabel('Target %')
plt.rcParams["font.size"] = "20"
plt.ylim((0.1, 1.0))
plt.legend([prob, btwn, tgt], ['Probable', 'Confidence Interval', 'Target'])
plt.title("Target Forecast Nov20 - Nov21")

plt.show()
plt.close()

但它以TypeError结尾:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-61-3ef952c0fc7f> in <module>
      1 fig, ax = plt.subplots(figsize=(17,8))
      2 prob, = ax.plot(month, z)
----> 3 btwn, = ax.fill_between(month, x, y, color='b', alpha=.3)
      4 tgt, = ax.hlines(y=0.50, xmin=0, xmax=(len(month)), colors='orange', linestyles='--', lw=2, label="Target: 50%")
      5 plt.xlabel('Month')

TypeError: 'PolyCollection' object is not iterable

如何将这些东西添加到图例中?

matplotlib 文档通常建议使用代理艺术家

否则,在您的情况下,您只需添加label参数并按照您想要的方式命名,图例就会自动更新。

在你的情况下:

ax.plot(month, z, label="Probable Forecast")
ax.fill_between(month, x, y, color='b', alpha=.3, label="Confidence Interval")

应该管用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM