【matplotlib】可视化解决方案——如何正确设置图例

文章介绍了matplotlib库中创建和管理图例Legend的方法,包括通过pyplot.legend()函数的四种调用方式,以及关键参数如loc、ncol等的使用。示例代码展示了如何在图表中添加图例,并设置了图例标题和样式。
摘要由CSDN通过智能技术生成

概述

matplotlib 中的图例(Legend)可以帮助我们展示每个数据对应的名称,让图像阅读者更好的认识到图像的数据结构以及绘图者想表达的意思。matplotlib 可以为每一个可见绘图对象(Artist)添加图例,官方建议调用 pyplot.legend() 方法便捷地创建图例,而不是使用面向对象的方法,即显式创建 matplotlib.legend.Legend 对象构造图例。

一般情况下一个图例包含多个图例条目,每个图例条目包含:

  • 图例键:每个图例标签左侧的彩色/带图案标记;
  • 图例标签:描述由图例键表示的句柄的文本;

每一个图例条目会和一个图例句柄绑定,每一个图例句柄用于在图例中生成适当条目的原始对象。

我们在实际绘图中常调用 pyplot.legend() 方法完成绘图,该方法的签名为 :

legend()
legend(handles, labels)
legend(handles=handles)
legend(labels)

方式 1:不传递任何参数

第一种方式调用方法时不传递任何额外参数, matplotlib 会自动确定要添加到图例中的元素,这种情况下,所有的图例标签来自 Artist 对象,这就需要显式的指明每一个Artist 对象的图例标签,如果没有显式指定,那么 matplotlib 不会绘制任何图例,并会给出提示 No artists with labels found to put in legend. 。正确形式为:

plt.plot([1, 2, 3], label='Inline label')
plt.legend()

方式 2:传递图例句柄和图例标签

第二种方式可以完全控制每一个 Artist 对象以及其显示的图例信息,该方式需要传递一个可迭代 Artist 对象容器和一个可迭代图例标签对象容器,例如 plt.legend([line1, line2, line3], ['label1', 'label2', 'label3'])

方式 3:仅传递图例句柄

第三种方式和第二种方式类似,但是更加便捷,同时可以控制哪些 Artist 对象需要显示图例,此时图例标签来自 Artist 对象本身,例如:

line1, = plt.plot([1, 2, 3], label='label1')
line2, = plt.plot([1, 2, 3], label='label2')
plt.legend(handles=[line1, line2])

方式 4:仅传递图例标签

第四种方式仅传递图例标签,这种方式官方是不推荐的,因为这可能导致图例句柄和图例标签之间的不匹配,所以在此不再赘述,如果想要了解具体信息,可以访问官网。

关键参数

除了上述必要参数之外,还可以传递如下参数:

  • loc:指定图例显示的位置,默认使用最佳位置显示图例;
  • ncol:指定图例显示的列数,默认 1;
  • prop:指定图例字体属性;
  • fontsize:指定图例字体大小;
  • labelcolor:指定图例标签颜色;
  • frameon:指定图例区域是否有边框;
  • fancybox:指定图例区域矩形是否为圆角;
  • title:指定图例标题;
  • title_fontsize:指定图例标题字体大小;
  • shadow:指定图例区域是否有阴影;
  • facecolor:指定图例区域背景颜色;
  • edgecolor:指定图例区域边缘颜色;
  • labelspacing:指定图例条目之间的垂直间距;
  • markerscale:指定图例标签中标记点的缩放比例;

案例

接下来,我们将绘制一个余弦函数作为案例。子图 1使用方式 1 绘制图例,子图 2 使用方式 2 绘制图例,二者都设置图例标题。案例完整代码如下:

import matplotlib.pyplot as plt  
import numpy as np  
  
plt.rcParams["font.sans-serif"] = ["SimHei"]  
plt.rcParams["axes.unicode_minus"] = False  
  
x = np.linspace(0, 2 * np.pi, 1000)  
y = np.cos(x)  
  
fig, ax = plt.subplots(1, 2)  
# 方式1  
ax[0].plot(x, y, label='余弦函数', color='cornflowerblue')  
ax[0].legend(title='方式1', title_fontsize=15)  
  
# 方式2  
line_obj = ax[1].plot(x, y, color='goldenrod')  
ax[1].legend(handles=line_obj, labels=['余弦函数'], title='方式2', title_fontsize=15)  
  
plt.show()

画图结果如下:

在这里插入图片描述

往期回顾

可视化解决方案

  1. 【matplotlib】可视化解决方案——如何正确设置轴长度和范围
  2. 【matplotlib】可视化解决方案——如何正确理解pyplot和OO-API
  3. 【matplotlib】可视化解决方案——如何正确展示和保存图像
  4. 【matplotlib】可视化解决方案——如何设置字符串的输出字体效果
  5. 【matplotlib】可视化解决方案——如何正确使用颜色映射表
  6. 【matplotlib】可视化解决方案——如何调整轴脊位置
  7. 【matplotlib】可视化解决方案——如何设置坐标系计量方法
  8. 【matplotlib】可视化解决方案——如何正确使用文本注释
  9. 【matplotlib】可视化解决方案——如何调整计量单位和计量方法
  10. 【matplotlib】可视化解决方案——如何实现图形的动画效果

文中难免会出现一些描述不当之处(尽管我已反复检查多次),欢迎在留言区指正,相关的知识点也可进行分享,希望大家都能有所收获!!如果觉得我的文章写得还行,不妨支持一下。你的每一个转发、关注、点赞、评论都是对我最大的支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猪猪家的大猪猪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值