子图中的 Matplotlib 图例

新手上路,请多包涵

我想将图例放入下面的每个子图中。我试过 plt.legend 但它没有用。

 f, (ax1, ax2, ax3) = plt.subplots(3, sharex=True, sharey=True)
ax1.plot(xtr, color='r', label='Blue stars')
ax2.plot(ytr, color='g')
ax3.plot(ztr, color='b')
ax1.set_title('2012/09/15')
plt.legend([ax1, ax2, ax3],["HHZ 1", "HHN", "HHE"])
plt.show()

结果图根据 atomh33ls 的建议:

 ax1.legend("HHZ 1",loc="upper right")
ax2.legend("HHN",loc="upper right")
ax3.legend("HHE",loc="upper right")

图例位置是固定的,但是字符串似乎有问题,因为每个字母都换行。

有谁知道如何解决它?

在此处输入图像描述

原文由 CatarinaCM 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 357
2 个回答

这应该工作:

 ax1.plot(xtr, color='r', label='HHZ 1')
ax1.legend(loc="upper right")
ax2.plot(xtr, color='r', label='HHN')
ax2.legend(loc="upper right")
ax3.plot(xtr, color='r', label='HHE')
ax3.legend(loc="upper right")

原文由 Lee 发布,翻译遵循 CC BY-SA 3.0 许可协议

你想要的无法完成,因为 plt.legend() places a legend in the current axes ,在你的例子中是最后一个。

另一方面,如果您满足于在最后一个子图中放置一个综合图例,您可以这样做

f, (ax1, ax2, ax3) = plt.subplots(3, sharex=True, sharey=True)
l1,=ax1.plot(x,y, color='r', label='Blue stars')
l2,=ax2.plot(x,y, color='g')
l3,=ax3.plot(x,y, color='b')
ax1.set_title('2012/09/15')
plt.legend([l1, l2, l3],["HHZ 1", "HHN", "HHE"])
plt.show()

在此处输入图像描述

请注意,您传递给 legend 不是轴,如示例代码中所示,而是 plot 调用返回的行。

聚苯乙烯

当然,您可以在每个子图之后调用 legend ,但据我了解,您已经知道这一点,并且正在寻找一种立即执行此操作的方法。

原文由 gboffi 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题