python中matplotlib实现随鼠标滑动自动标注代码


Posted in Python onApril 23, 2020

Python+matplotlib进行鼠标交互,实现动态标注,数据可视化显示,鼠标划过时画一条竖线并使用标签来显示当前值。

Python3.6.5,代码示例:

import matplotlib.pyplot as plt
import numpy as np
	
def Show(y):
	#参数为一个list
	
	len_y = len(y)
	x = range(len_y)
	_y = [y[-1]]*len_y
	
	fig = plt.figure(figsize=(960/72,360/72))
	ax1 = fig.add_subplot(1,1,1)
	
	ax1.plot(x, y, color='blue')
	line_x = ax1.plot(x, _y, color='skyblue')[0]
	line_y = ax1.axvline(x=len_y-1, color='skyblue')
	
	ax1.set_title('aaa')
	#标签
	text0 = plt.text(len_y-1,y[-1],str(y[-1]),fontsize = 10)
	
	def scroll(event):
		axtemp=event.inaxes
		x_min, x_max = axtemp.get_xlim()
		fanwei_x = (x_max - x_min) / 10
		if event.button == 'up':
			axtemp.set(xlim=(x_min + fanwei_x, x_max - fanwei_x))
		elif event.button == 'down':
			axtemp.set(xlim=(x_min - fanwei_x, x_max + fanwei_x))
		fig.canvas.draw_idle() 
	#这个函数实时更新图片的显示内容
	def motion(event):
		try:
			temp = y[int(np.round(event.xdata))]
			for i in range(len_y):
				_y[i] = temp
			line_x.set_ydata(_y)
			line_y.set_xdata(event.xdata)
			######
			text0.set_position((event.xdata, temp))
			text0.set_text(str(temp))
			
			fig.canvas.draw_idle() # 绘图动作实时反映在图像上
		except:
			pass

	fig.canvas.mpl_connect('scroll_event', scroll)
	fig.canvas.mpl_connect('motion_notify_event', motion)
	
	plt.show()

效果演示:

python中matplotlib实现随鼠标滑动自动标注代码

补充知识:matplotlib获取鼠标所在位置的axes

手头的项目遇到一个问题,如何获取鼠标所在位置的axes对应的obspy.core.trace。在绘制axes时,我设置了一个数组用来保存每一个trace所对应的axes,这样比较方便绘制标签。但我的项目需要对绘制的图像做放大缩小以及拖拽,这需要我单独对一个axes来进行相应的操作。那么如何通过axes来获得对应的trace呢?我想了这几个办法:

1.设置一个hash表,记录每一个axes与trace的对应情况,通过鼠标操作传入的event,可以得到当前axes的引用地址,以这个引用地址作为关键字查找hash表,获取对应trace。

2.通过axes引用地址定位到mpl的axes数组,通过axes数组的下标来访问绘制时设置的数组获得trace。

3.获取axes.label的内容,作为关键字去遍历obspy.core.stream,获取trace。

4.通过event获取鼠标位置,在结合画布大小通过计算得到数组下标,在访问绘制时设置的数组可以得到trace

前三种方法都不能保证一定能获取到trace,并且有出错的风险,但是如果可以实现,可靠性是大于最后一种,但是最后一种实现起来是最简单的,明天我再思考如何通过matplotlib的鼠标事件来获取对应的trace

后来发现,可以采用第三种方法。访问event.inaxes来获得

以上这篇python中matplotlib实现随鼠标滑动自动标注代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
基于Django模板中的数字自增(详解)
Sep 05 Python
python 实现在Excel末尾增加新行
May 02 Python
Python处理中文标点符号大集合
May 14 Python
Python range与enumerate函数区别解析
Feb 28 Python
Python读取excel文件中带公式的值的实现
Apr 17 Python
Java爬虫技术框架之Heritrix框架详解
Jul 22 Python
pytorch加载语音类自定义数据集的方法教程
Nov 10 Python
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
Apr 03 Python
Pytorch中TensorBoard及torchsummary的使用详解
May 12 Python
Python Pandas pandas.read_sql函数实例用法
Jun 21 Python
python库sklearn常用操作
Aug 23 Python
Python可变集合和不可变集合的构造方法大全
Dec 06 Python
使用matplotlib动态刷新指定曲线实例
Apr 23 #Python
Flask模板引擎Jinja2使用实例
Apr 23 #Python
利用pandas向一个csv文件追加写入数据的实现示例
Apr 23 #Python
在matplotlib中改变figure的布局和大小实例
Apr 23 #Python
Python将二维列表list的数据输出(TXT,Excel)
Apr 23 #Python
Python基于DB-API操作MySQL数据库过程解析
Apr 23 #Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
Apr 23 #Python
You might like
破解图片防盗链的代码(asp/php)测试通过
2010/07/02 PHP
JS中encodeURIComponent函数用php解码的代码
2012/03/01 PHP
PHP简洁函数(PHP简单明了函数语法)
2012/06/10 PHP
PHP中使用虚代理实现延迟加载技术
2014/11/05 PHP
php判断当前用户已在别处登录的方法
2015/01/06 PHP
php实现等比例不失真缩放上传图片的方法
2016/11/14 PHP
JQuery与iframe交互实现代码
2009/12/24 Javascript
使用JavaScript实现Java的List功能(实例讲解)
2013/11/07 Javascript
DOM基础教程之使用DOM + Css
2015/01/20 Javascript
jQuery实现菜单式图片滑动切换
2015/03/14 Javascript
jquery常用函数与方法汇总
2015/09/01 Javascript
java中String类型变量的赋值问题介绍
2016/03/23 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
AngularJS 遇到的小坑与技巧小结
2016/06/07 Javascript
14 个折磨人的 JavaScript 面试题
2016/08/08 Javascript
JavaScript的事件机制详解
2017/01/17 Javascript
ES6新数据结构Map功能与用法示例
2017/03/31 Javascript
arcgis for js栅格图层叠加(Raster Layer)问题
2017/11/22 Javascript
Vue 解决在element中使用$notify在提示信息中换行问题
2020/11/11 Javascript
使用webpack5从0到1搭建一个react项目的实现步骤
2020/12/16 Javascript
王纯业的Python学习笔记 下载
2007/02/10 Python
Python中字符串对齐方法介绍
2015/05/21 Python
python函数局部变量用法实例分析
2015/08/04 Python
解决pandas展示数据输出时列名不能对齐的问题
2019/11/18 Python
python输出国际象棋棋盘的实例分享
2020/11/26 Python
全球最大的房车租赁市场:Outdoorsy
2018/09/19 全球购物
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
zooplus德国:便宜地订购动物用品、动物饲料、动物食品
2020/05/06 全球购物
高一生物教学反思
2014/01/17 职场文书
简单的辞职信范文
2014/01/18 职场文书
致400米运动员广播稿
2014/02/07 职场文书
新闻报道策划方案
2014/06/11 职场文书
MySQL安装后默认自带数据库的作用详解
2021/04/27 MySQL
python opencv通过4坐标剪裁图片
2021/06/05 Python
MySQL Innodb索引机制详细介绍
2021/11/23 MySQL
MongoDB数据库之添删改查
2022/04/26 MongoDB