这是应该起作用的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()
所以基本上,给线条添加标签,而不是图例,legend需要通过名称识别对象,如果不标记它们,则无法识别(它还会自动更改图例中的线条以适应当前外观)。在
同时也要检查y轴的范围。它经常尝试自动调整它们的大小,对于水平线,它经常失败,并将它们放在图形的最边缘。他们在那里你却看不见他们!在
编辑1:
既然我能看出你被这个弄糊涂了。我做了几个阴谋。第一个是文本(通常是任何其他框)。第二个是由loc关键字决定的图例。第三种是由bbox_to_anchor决定位置的传说。请注意文本框与图例框不对应。主要原因是bbox_to_anchor锚定在图例的右上角,而文本锚定在框的左下角。在
还要注意loc关键字与bbox_to_anchor不依赖于图形缩放。为了摆脱这个坏习惯,你必须通过
^{pr2}$
此外,如果您的图例甚至不适合交互式绘图屏幕中的灰色绘图区域,则必须选择“配置子图”图标,并更改值,直到您可以再次找到图例为止。在
同样重要的是要认识到,通过向带有bbox_to_anchor的图例添加loc关键字没有任何区别。bbox_to_anchor将践踏您为图例提供的所有其他位置。在
现在我要说的是,如果您不愿意阅读本手册并深入了解matplotlib实现,那么您不应该真正地干预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()