[英]error of adding a legend for a plot in Python 3.2 Matplotlib
我需要在Python 3.2 Matplotlib中为图添加图例。
但是,添加“ black_dash”后无法显示图例
我的代码:
blue_line, = plt.plot([0, 1], [-3, -3], color='b', linestyle='-', linewidth=1)
black_dash, = plt.plot([0, 1], [-7, -7], color='k', linestyle='--', linewidth=1)
plt.legend([blue_line, black_dash] , ["boundary of reg_zip", "lat/lon line"] , loc='upper center', bbox_to_anchor=(0.5, -0.5), \
fancybox=True, shadow=True, ncol=5, fontsize=11)
图例应包含两行及其说明。
更新:
我需要在图例中插入一个填充的黑色圆圈,但出现错误:
File "C:\Python32\lib\site-packages\matplotlib\backends\backend_agg.py", line 146, in draw_path
self._renderer.draw_path(gc, path, transform, rgbFace)
**TypeError: float() argument must be a string or a number**
我的代码:
plt.plot([0, 1], [-3, -3], "ro", ms=10, mfc="k", mew=2, mec="k", label="boundary of reg_zip")
谢谢
这是应该工作的
plt.plot([0, 1], [-3, -3], color='b', linestyle='-', linewidth=1, label="blue line")
plt.plot([0, 1], [-7, -7], color='k', linestyle='--', linewidth=1, label="black dash")
plt.legend(loc='upper center', fancybox=True, shadow=True, ncol=5, fontsize=11)
plt.show()
因此,基本上,在行中添加标签,而不是图例,图例需要通过名称识别对象,如果您不对它们进行标签,则图例就不能(这也会自动更改图例中的行以适合当前外观)。
还请务必检查您的y轴范围。 它经常尝试自动调整它们的大小,并且使用水平线经常会失败并将它们放置在图形的最边缘。 它们在那里,您看不到它们!
编辑1:
既然我能看到你对此感到困惑。 我做了几个情节。 第一个是文本(通常是其他任何框)。 其次是传说,其位置由loc
关键字确定。 第三是传说的立场由bbox_to_anchor
确定。 请注意,文本框与图例框不对应。 主要原因是bbox_to_anchor
锚定了图例的右上角,而文本锚定了框的左下角。
还要注意loc
关键字如何不像bbox_to_anchor
那样取决于图形缩放。 要摆脱这种讨厌的习惯,您必须通过执行以下操作为bbox_to_anchor
声明一个转换:
plt.legend(bbox_to_anchor=(1, 1),
bbox_transform=plt.gcf().transFigure)
如图例手册中所述 。
此外,如果您的图例甚至不适合交互式绘图屏幕中的灰色图区域,则必须选择“配置子图”图标,然后更改值,直到可以再次找到图例。
同样重要的是要意识到,通过使用bbox_to_anchor
向图例添加loc
关键字bbox_to_anchor
没有区别。 bbox_to_anchor
将践踏您提供图例的所有其他位置。
现在,我要说的是,如果您不愿意阅读手册并更深入地研究matplotlib实现,那么您不应该真正介入bbox_to_anchor
选项,但我确实建议在所有情况下都避免使用bbox_to_anchor
,您的图表太拥挤了,您必须将其放置在外面。 (在哪种情况下是考虑图形设计的好时机?)
最后,这是从上方绘制图形的代码。
import matplotlib.pyplot as plt
plt.plot((0,0), (1,1), label="legend")
legends = []
for i in range(0, 11):
legends.append(plt.legend([str(i)], loc=i))
for legend in legends:
plt.gca().add_artist(legend)
#legends with loc=5 and 7 overlap
plt.show()
plt.plot((0,1), (0,1), label="legend")
legend1 = plt.legend(["0,0"], bbox_to_anchor=(0, 0))
legend3 = plt.legend(["1,1"], bbox_to_anchor=(1, 1))
legend2 = plt.legend(["0.5,0.5"], bbox_to_anchor=(0.5, 0.5))
legend4 = plt.legend(["0.5,0"], bbox_to_anchor=(0.5, 0))
legend6 = plt.legend(["0,0.5"], bbox_to_anchor=(0, 0.5))
legend5 = plt.legend(["1,0.5"], bbox_to_anchor=(1, 0.5))
legend7 = plt.legend(["0.5,1"], bbox_to_anchor=(0.5, 1))
legend8 = plt.legend(["1,0"], bbox_to_anchor=(1, 0))
legend9 = plt.legend(["0,1"], bbox_to_anchor=(0, 1))
plt.gca().add_artist(legend1)
plt.gca().add_artist(legend2)
plt.gca().add_artist(legend3)
plt.gca().add_artist(legend4)
plt.gca().add_artist(legend5)
plt.gca().add_artist(legend6)
plt.gca().add_artist(legend7)
plt.gca().add_artist(legend8)
plt.gca().add_artist(legend9)
plt.show()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.