如何在 Python matplotlib 子图中显示图例

Posted

技术标签:

【中文标题】如何在 Python matplotlib 子图中显示图例【英文标题】:How to display legend in Python matplotlib subplots 【发布时间】:2021-03-27 11:17:23 【问题描述】:

我正在绘制 4 条曲线,如下所示。在每个子图中,我想要一个带有标签的图例,只是变量名。例如,对于由 axs[0,0] 定义的子图,图例应为“y1”和“y2”,(自然与各自的线条颜色)。 我尝试了下面的代码,但没有显示图例。

    fig, axs = plt.subplots(2, 2)
    axs[0, 0].plot(x,One_year[['y1','y2']])
    axs[0, 1].plot(x,One_year[['z1','z2']])
    axs[0, 2].plot(x,One_year[['m1','m2']])
    axs[1, 0].plot(x,One_year[['p1','p2']])
    fig.autofmt_xdate()
    plt.legend()
    plt.show()

【问题讨论】:

【参考方案1】:

您需要在绘图时提供label 关键字参数,并调用legend 方法在子图上绘制图例

fig, axs = plt.subplots(2, 2)

axs[0, 0].plot(x,One_year[['y1','y2']], label= "y1 and y2")
axs[0, 0].legend()

axs[0, 1].plot(x,One_year[['z1','z2']], label= "z1 and z2")
axs[0, 1].legend()

# indexing was wrong here(in the posted code)
# axs is a 2x2 matrix
axs[1, 0].plot(x,One_year[['m1','m2']], label= "m1 and m2")
axs[1, 0].legend()

axs[1, 1].plot(x,One_year[['p1','p2']], label= "p1 and p2")
axs[1, 1].legend()

fig.autofmt_xdate()
# plt.legend()
plt.show()

编辑:我用一些随机数据进行了测试,这很有效。你有什么错误吗?

【讨论】:

以上是关于如何在 Python matplotlib 子图中显示图例的主要内容,如果未能解决你的问题,请参考以下文章

matplotlib如何在子图中正确绘制文本[重复]

Matplotlib - 在错误的子图中绘制的变量[重复]

Matplotlib - 在错误的子图中绘制的变量[重复]

如何使用 matplotlib 调整子图中的图形大小

python使用matplotlib可视化subplots绘制子图自定义几行几列子图,如果M行N列,那么最终包含M*N个子图在指定的子图中添加可视化结果

子图中的分页符?多个页面上的 Matplotlib 子图