• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python matplotlib绘图实现删除重复冗余图例的操作

    问题:

    由于自己做项目的时候,需要循环的绘制数据,假设有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() # 关窗口

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

    您可能感兴趣的文章:
    • Python matplotlib可视化绘图详解
    • Python绘图之详解matplotlib
    • Python绘图库Matplotlib的基本用法
    • Python matplotlib实用绘图技巧汇总
    • python 绘图模块matplotlib的使用简介
    • Python matplotlib绘图详解
    上一篇:Python 作图实现坐标轴截断(打断)的效果
    下一篇:pytest框架之fixture详细使用详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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