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

作者:grace_cxj 时间:2023-11-02 22:36:44 

问题:

由于自己做项目的时候,需要循环的绘制数据,假设有100个样本,每个样本包含两个坐标点(A, B),我需要对这两个点标上不同的颜色,同时还要画出两点间的连线。

显然这个问题中图例我只需要3个(A点,B点,AB的连线),而不是300个,因为每个样本的A点都是同样的颜色,B点也都是一样的颜色,AB的连线也是。

但是单纯的在画完图之后用plt.legend(), 它会给你画出所有300个图例来,这肯定不是我想要的。

探索过程:

如何解决呢?

当然有一种很强制的方法,就是只在画第一个样本,或最后一个样本时,给其指定label,其它样本时不给label,就不会画出来了。

但是我在想有没有更好地办法,百度了半天,穷尽所有关键词,无果。

转而谷歌,想着要不把关键词换成英语看看(以前总觉得看英文的博客会比中文的慢很多,总会更偏向于母语阅读,但是这次经历大概会改变我之后的态度,相比起为了排除百度的大量无关答案所花的漫长的时间,好像还不如直接搜索英文来得有效率,关键词搜的就是: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())

理解:

plt的legend函数可接收两个参数,一个是handles列表,一个是label列表。

引入有序字典OrderedDict的目的就是去除冗余的图例,因为字典的键值不能重复(即重复的只保留一个)。

第一行的意思应该是迭代地将当前plt中存的所有handles和labels返回到handles变量和labels变量中,你之前所在画布上画的每一步应该都会存在plt中。

所以,上述代码的作用是:仅保留plt中存在的所有非同名的图例名称,不出现重复图例名称

补充:Python/matplotlib之清空绘图

clf() # 清图

cla() # 清坐标轴

close() # 关窗口

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

来源:https://blog.csdn.net/grace_cxj/article/details/80963211

标签:python,matplotlib,重复,图例
0
投稿

猜你喜欢

  • python try except 捕获所有异常的实例

    2023-03-22 18:49:50
  • python下实现二叉堆以及堆排序的示例

    2023-02-19 16:44:23
  • 如何实现论坛的树状记录表展开技术?

    2010-05-19 21:37:00
  • XML入门教程:XML CDATA的作用

    2007-11-07 14:08:00
  • python实现简单的五子棋游戏

    2023-07-30 13:24:31
  • python比较两个列表大小的方法

    2023-01-14 22:24:40
  • Python实现的读取/更改/写入xml文件操作示例

    2023-06-05 05:16:42
  • python os.stat()如何获取相关文件的系统状态信息

    2022-06-18 09:28:23
  • pytorch中tensor张量数据类型的转化方式

    2022-03-19 20:07:24
  • Python图像特效之模糊玻璃效果

    2022-09-08 11:38:21
  • python的几种开发工具介绍

    2021-09-28 01:54:44
  • Jmeter通过OS进程取样器调用Python脚本实现参数互传

    2022-07-09 18:43:27
  • Python绘制股票移动均线的实例

    2023-07-15 10:31:06
  • 浅析Python中的多重继承

    2021-03-19 21:17:56
  • 透明数据加密(TDE)库的备份和还原

    2024-01-14 04:51:57
  • Python编程快速上手——strip()函数的正则表达式实现方法分析

    2022-07-24 07:08:59
  • python用于url解码和中文解析的小脚本(python url decoder)

    2023-01-28 06:19:00
  • Mysql实战练习之简单图书管理系统

    2024-01-17 14:09:32
  • Vue不同项目之间传递、接收参数问题

    2024-04-30 10:47:06
  • vue监听页面中的某个div的滚动事件并判断滚动的位置

    2024-05-09 15:08:49
  • asp之家 网络编程 m.aspxhome.com