Python matplotlib绘图实现删除重复冗余图例的操作

清欢
清欢
发布时间:2026-10-12| 3人浏览过
原创

本文介绍在Python中使用matplotlib循环绘制大量数据时,如何避免生成冗余图例。通过获取当前图句柄和标签,利用OrderedDict去除重复项,仅保留唯一标识的图例。同时附带清空绘图、坐标轴及关闭窗口的常用命令,帮助提升图表清晰度与代码效率。

问题描述:

在个人项目开发过程中,经常需要循环绘制数据。例如,假设有100个样本,每个样本包含两个坐标点(A和B)。我们需要为这两个点标记不同的颜色,并绘制两点之间的连线。

在此场景下,图例仅需展示3项:A点、B点以及AB连线。由于所有样本中的A点颜色一致,B点颜色一致,连线样式也相同,因此不需要生成300个图例,而是希望合并为统一的3个图例。

然而,如果在绘图完成后直接调用plt.legend(),系统会生成全部300个图例,这显然不符合预期需求。

探索过程:

针对上述问题,寻求解决方案。

一种较为直接的方法是:仅在绘制第一个或最后一个样本时指定label参数,其余样本不指定label。这样生成的图例中,未指定label的项不会显示,从而避免冗余。

但我希望寻找更优雅的方法。经过百度多次尝试,使用各种关键词搜索,均未找到理想答案。

随后转向Google搜索,尝试将关键词替换为英文(以往认为阅读英文博客效率较低,更倾向母语阅读,但此次经历可能改变这一观点。相比花费大量时间筛选百度的无关结果,直接搜索英文往往更高效)。使用的关键词为“python omit redundant legend”,第一条搜索结果即提供了所需方案,令人惊喜。出于方便日后查找及帮助遇到相同问题者的目的,特此记录。虽然技术含量不高,但具有实用价值。

解决方案:

from collections import OrderedDict
import matplotlib.pyplot as plt
 
handles, labels = plt.gca().get_legend_handles_labels()
by_label = OrderedDict(zip(labels, handles))
plt.legend(by_label.values(), by_label.keys())

原理说明:

matplotlib的legend函数接收两个参数:handles(图句柄列表)和labels(标签列表)。

引入OrderedDict(有序字典)的目的是去除冗余图例。由于字典的键(key)不能重复,重复的键值对只保留一个,从而实现去重。

代码第一行的作用是迭代获取当前plt中存储的所有handles和labels,并将其分别赋值给handles变量和labels变量。此前在画布上绘制的每一步操作,其句柄和标签均保存在plt中。

因此,上述代码的核心作用是:仅保留plt中存在的所有非同名图例标签,自动过滤掉重复的图例名称。

补充知识:Python/matplotlib中清空绘图的相关操作

clf() # 清空图形窗口

cla() # 清空坐标轴

close() # 关闭窗口

以上为个人经验分享,希望能提供参考。欢迎大家支持本站。如有错误或考虑不周之处,敬请指正。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。