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()
# 关窗口
以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。
相关推荐
-
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
matplotlib有两种绘图方式,一种是依托matplotlib.pyplot模块实现类似matlab绘图指令的绘图方式,一种是面向对象式绘图,依靠FigureCanvas(画布). Figure (图像). Axes (轴域) 等对象绘图. 这两种方式之间并不是完全独立的,而是通过某种机制进行了联结,pylot绘图模式其实隐式创建了面向对象模式的相关对象,其中的关键是matplotlib._pylab_helpers模块中的单例类Gcf,它的作用是追踪当前活动的画布及图像. 因此,可以说ma
-
python 绘图模块matplotlib的使用简介
上周对线上某几个磁盘进行了fio硬盘性能测试,测试完成之后的结果需要绘制成图像展示出来.我在官网上查找了一下fio自带的命令fio_generate_plot和fio2gnuplot工具的用法,找到了图像的绘制方法,在某一个单一的场景下,确实可以使用这两个工具来进行硬盘性能图像绘制,但是问题是,如果要对比多个场景下绘制出来的图像的差异,fio自带的绘图工具实现起来就有些困难了,但是确实也能实现.例如下图: 如图所示为磁盘iodepth不变,numjobs在(1,8,16)三种不同的场景下绘制出来
-
Pyside2中嵌入Matplotlib的绘图的实现
近期遇到一个需求,就是用PySide2做出一个GUI,并且要将后台使用Matplotlib绘制的图显示在界面上.自己琢磨了蛮久,网上也搜了不少资料,但都感觉参差不齐,所以就自己总结一下. 我们使用QGraphicsView插件来显示Matplotlib里绘制的图片.这里演示的功能为:打开时界面默认绘制 cos函数的图像,点击按钮后,绘制sin函数的图像. 1. 界面设计 简单创建一个界面:一个 GraphicsView 和 一个 PushButton 2. 定义一个类,继承FigureCanva
-
解决使用Spyder IDE时matplotlib绘图的显示问题
Spyder 环境下 matplotlib 的 backend 设置是在打开环境时就配置好了的 所以通常的方法: import matplotlib matplotlib.use('Qt5Agg') 是无效的. Spyder 下解决这个问题最简单的方法是 GUI 的方法: Tools -> Preferences -> IPython console -> Graphics -> Backend: Qt5 应用,然后可能需要重启一下,就可以了.如无特殊需要,以后无需更改. 补充:P
-
详解matplotlib绘图样式(style)初探
样式是定义图表可视化外观的配置,它由一组预置的rcParams参数构成.matplotlib预置了一系列样式风格,可直接使用. 样式使用方法 样式相关模块为style. 1. 显示本机可用样式 matplotlib.style.available返回本机可用样式的列表. 列表只读,样式更新后,需要使用reload_library()重新加载样式. In [1]: import matplotlib.style as style In [2]: style.available Out[2]: ['
-
用Python的绘图库(matplotlib)绘制小波能量谱
时间小波能量谱 反映信号的小波能量沿时间轴的分布. 由于小波变换具有等距效应,所以有: 式中 表示信号强度,对于式①在平移因子b方向上进行加权积分 式中 代表时间-小能量谱 尺度小波能量谱 反映信号的小波能量随尺度的变化情况. 同理,对式①在尺度方向上进行加权积分: 式中 连续小波变换 连续小波变换的结果是一个小波系数矩阵,随着尺度因子和位移因子变化.然后将系数平方后得到小波能量,把每个尺度因子对应的所有小波能量进行叠加,那么就可以得到随尺度因子变换的小波能量谱曲线.把尺度换算成频率后,这条曲线
-
python之 matplotlib和pandas绘图教程
不得不说使用python库matplotlib绘图确实比较丑,但使用起来还算是比较方便,做自己的小小研究可以使用.这里记录一些统计作图方法,包括pandas作图和plt作图. 前提是先导入第三方库吧 import pandas as pd import matplotlib.pyplot as plt import numpy as np 然后以下这两句用于正常显示中文标签什么的. plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
-
python matplotlib绘图实现删除重复冗余图例的操作
问题: 由于自己做项目的时候,需要循环的绘制数据,假设有100个样本,每个样本包含两个坐标点(A, B),我需要对这两个点标上不同的颜色,同时还要画出两点间的连线. 显然这个问题中图例我只需要3个(A点,B点,AB的连线),而不是300个,因为每个样本的A点都是同样的颜色,B点也都是一样的颜色,AB的连线也是. 但是单纯的在画完图之后用plt.legend(), 它会给你画出所有300个图例来,这肯定不是我想要的. 探索过程: 如何解决呢? 当然有一种很强制的方法,就是只在画第一个样本,或最后一
-
Python matplotlib绘图设置图例案例
目录 一.语法简介 二.完整代码 一.语法简介 plt.legend(loc=2,edgecolor='red',facecolor='green',shadow='True',fontsize=10) edgecolor 图例边框线颜色 facecolor 图例背景色 shadow 是否添加阴影 title 图例标题 fontsize 设置字体大小 ''' 设置图例位置loc参数简介 best 0 根据图标区域自动选择最合适的位置 upper right 1 右上角
-
Python matplotlib绘图时指定图像大小及放大图像详解
matplotlib绘图时是默认的大小,有时候默认的大小会感觉图片里的内容都被压缩了,解决方法如下. 先是原始代码: from matplotlib import pyplot as plt plt.figure(figsize=(1,1)) x = [1,2,3] plt.plot(x, x) plt.show() 关键的代码是plt.figure(figsize=(1,1)),生成的图片如下 修改代码,放大图片: from matplotlib import pyplot as plt pl
-
Python Matplotlib绘图基础详细教程
目录 1. 画图的基本步骤 1.1一步一步看 2.散点图 3.条形图的绘制 4.四幅子图的绘制 5.饼状图的绘制 6.热力图的绘制 总结 plt是最常用的接口 1. 画图的基本步骤 1.导入模块 import matplotlib as mpl import matplotlib.pyplot as plt 2.创建画板,然后对画板进行调整 3.定义数据 4.绘制图形(包含坐标轴的设置,数据的导入,线条的样式,颜色,还有标题,图例,等等) 5.plt.show() 1.1一步一步看 1.1.1*
-
python matplotlib绘图,修改坐标轴刻度为文字的实例
工作中偶尔需要做客流分析,用pyplot 库绘图.一般情况下, x 轴刻度默认显示为数字. 例如: 我希望x 轴刻度显示为星期日期. 查询pyplot 文档, 发现了 xtick() 函数可以修改刻度. 代码如下: import matplotlib.pyplot as plt import numpy as np #val_ls = [np.random.randint(100) + i*20 for i in range(7)] scale_ls = range(7) index_ls =
-
完美解决Python matplotlib绘图时汉字显示不正常的问题
Matplotlib是一个很好的作图软件,但是python下默认不支持中文,所以需要做一些修改,方法如下: 1.在python安装目录的Lib目录下创建ch.py文件. 文件中代码为: 保存,以后通过以下代码调用: #-*-coding:utf-8-*- #文件名: ch.py def set_ch(): from pylab import mpl mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体 mpl.rcParams['axes
-
python matplotlib 绘图 和 dpi对应关系详解
我就废话不多说啦! dpi=1 600×400 dpi=2 1200×800 dpi=3 1800×1200 ........ dpi=21 (21×600)×(21×400) ---> 12600×8400 示例代码: ............... ............... plt_temp=y_axis plt_temp.resize(len(y_axis) , 1) plt_arr=np.concatenate((plt_arr,plt_temp ), axis=1) #print
-
解决Python Matplotlib绘图数据点位置错乱问题
在绘制正负样本在各个特征维度上的CDF(累积分布)图时出现了以下问题: 问题具体表现为: 1.几个负样本的数据点位置倒错 2.X轴刻度变成了乱七八糟一团鬼东西 最终解决办法 造成上述情况的原因其实是由于输入matplotlib.plot()函数的数据x_data和y_data从CSV文件中直接导入后格式为string,因此才会导致所有数据点的x坐标都被直接刻在了x轴上,且由于坐标数据格式错误,部分点也就表现为"乱点".解决办法就是导入x,y数据后先将其转化为float型数据,然后输入p
-
Python matplotlib绘图建立画布及坐标系
目录 一.建立画布 二.用plt.subplot函数建立坐标系,并分别绘制折线图和柱状图 三.完整代码如下所示 四.对应效果图如下所示 一.建立画布 import matplotlib.pyplot as plt import numpy as np x=np.arange(8) y=np.arange(8) print(x,y) #建立画布 figsize,它用width和height来控制画布的宽和高 plt.figure(figsize=(8,6),dpi=90) #facecolor='
-
Python matplotlib绘图时使用鼠标滚轮放大/缩小图像
目录 思路: 示例: 输出效果: 总结 思路: 使用fig.canvas.mpl_connect()函数来绑定相关fig的滚轮事件 利用事件event的inaxes属性获取当前鼠标所在坐标系ax 使用get_xlim()函数获取坐标系ax的x/y轴坐标刻度范围 使用set()函数对坐标系ax进行放大/缩小 示例: import matplotlib.pyplot as plt import numpy as np fig = plt.figure() def call_back(event):
随机推荐
- Perl字符串比较和整数比较的区别详解
- 解析PHP的session过期设置
- nginx源码分析configure脚本详解
- 利用Go语言搭建WebSocket服务端方法示例
- 关于JavaScript中的this指向问题总结篇
- android显示意图激活另一个Activity的方法
- Java设计模式之迭代器模式_动力节点Java学院整理
- Python的字典和列表的使用中一些需要注意的地方
- asp.net(C#)操作excel(上路篇)
- 第四节--构造函数和析构函数
- python网络编程之数据传输UDP实例分析
- C++常见错误中英文对照表
- 链接图片无缝(无间断)向左平滑滚动Js版代码
- java List 排序之冒泡排序实例代码
- SQLSERVER数据库升级脚本图文步骤
- 解析zend studio中直接导入svn中的项目的方法步骤
- jQuery获取当前点击的对象元素(实现代码)
- js实现简单登录功能的实例代码
- window.location和document.location的区别分析
- Firefox 之不传秘籍