这应该是可行的
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)
如legend manual 中所述。
此外,如果您的图例甚至不适合交互式绘图屏幕中的灰色绘图区域,您必须选择“配置子图”图标,并更改值,直到您可以再次找到您的图例。
同样重要的是要认识到,将 loc 关键字添加到带有 bbox_to_anchor 的图例中根本没有任何区别。 bbox_to_anchor将践踏您提供图例的所有其他位置。
现在,如果您不愿意阅读手册并更深入地研究 matplotlib 实现,我不是说您不应该真正干预bbox_to_anchor 选项,但我建议避免使用@987654337 @ 在所有情况下,除非您的图表过于拥挤,您必须将其放在外面。 (在这种情况下是考虑图形设计的好时机?)
最后,这是从上方绘制图形的代码。
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()