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 相关文章推荐
python实现simhash算法实例
Apr 25 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
Jan 23 Python
Python爬虫实例扒取2345天气预报
Mar 04 Python
教你使用python画一朵花送女朋友
Mar 29 Python
关于Python的一些学习总结
May 25 Python
Python装饰器基础概念与用法详解
Dec 22 Python
解决Django加载静态资源失败的问题
Jul 28 Python
django自定义非主键自增字段类型详解(auto increment field)
Mar 30 Python
Jupyter notebook运行Spark+Scala教程
Apr 10 Python
Python二元算术运算常用方法解析
Sep 15 Python
详解Pytorch显存动态分配规律探索
Nov 17 Python
Pycharm安装第三方库失败解决方案
Nov 17 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
《星际争霸》各版本雷兽特点图文解析 雷兽不同形态一览
2020/03/02 星际争霸
人大复印资料处理程序_输入篇
2006/10/09 PHP
thinkPHP框架实现的简单计算器示例
2018/12/07 PHP
javascript中的几个运算符
2007/06/29 Javascript
js cookies实现简单统计访问次数
2009/11/24 Javascript
iframe子页面与父页面在同域或不同域下的js通信
2014/05/07 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
深入理解jQuery layui分页控件的使用
2016/08/17 Javascript
jQuery表单对象属性过滤选择器实例详解
2016/09/13 Javascript
详解在create-react-app使用less与antd按需加载
2018/12/06 Javascript
Vue 权限控制的两种方法(路由验证)
2019/08/16 Javascript
vue简单练习 桌面时钟的实现代码实例
2019/09/19 Javascript
IDEA安装vue插件图文详解
2019/09/26 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
2019/12/25 Javascript
基于JavaScript实现轮播图效果
2021/01/02 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 RNG vs Dragon BO3 第一场 1月24日
2021/03/11 DOTA
[41:21]夜魇凡尔赛茶话会 第三期02:看图识人
2021/03/11 DOTA
对Python的Django框架中的项目进行单元测试的方法
2016/04/11 Python
Python与Java间Socket通信实例代码
2017/03/06 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
2020/04/24 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
FOREO官方网站:LUNA露娜洁面仪
2016/11/28 全球购物
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
美国最便宜的旅游网站:CheapTickets
2017/07/09 全球购物
美国高端牛仔品牌:Silver Jeans
2019/12/12 全球购物
迪卡侬中国官网:Decathlon中国
2020/08/10 全球购物
2013年入党人员的自我鉴定
2013/10/25 职场文书
报到证丢失证明
2014/01/11 职场文书
自我鉴定注意事项
2014/01/19 职场文书
2015年财政所工作总结
2015/04/25 职场文书
太空授课观后感
2015/06/17 职场文书
企业安全生产检查制度
2015/08/06 职场文书
Windows下redis下载、redis安装及使用教程
2021/06/02 Redis