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多线程编程方式分析示例详解
Dec 06 Python
使用python的chardet库获得文件编码并修改编码
Jan 22 Python
Python优先队列实现方法示例
Sep 21 Python
python实现教务管理系统
Mar 12 Python
Python批量提取PDF文件中文本的脚本
Mar 14 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
Jun 13 Python
python pygame模块编写飞机大战
Nov 20 Python
Python queue队列原理与应用案例分析
Sep 27 Python
python多进程间通信代码实例
Sep 30 Python
使用django和vue进行数据交互的方法步骤
Nov 11 Python
python在不同条件下的输入与输出
Feb 13 Python
Python日志器使用方法及原理解析
Sep 27 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
php实现统计网站在线人数的方法
2015/05/12 PHP
php上传excel表格并获取数据
2017/04/27 PHP
JS 用6N±1法求素数 实例教程
2009/10/20 Javascript
jQuery入门问答 整理的几个常见的初学者问题
2010/02/22 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
jQuery模拟黑客帝国矩阵效果实例
2015/06/28 Javascript
优化RequireJS项目的相关技巧总结
2015/07/01 Javascript
简单介绍JavaScript中字符串创建的基本方法
2015/07/07 Javascript
clipboard.js无需Flash无需依赖任何JS库实现文本复制与剪切
2015/10/10 Javascript
js跨域资源共享 基础篇
2016/07/02 Javascript
JavaScript的字符串方法汇总
2016/07/31 Javascript
JS使用ActiveXObject实现用户提交表单时屏蔽敏感词功能
2017/06/20 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
Angular中支持SCSS的方法
2017/11/18 Javascript
js实现HTML中Select二级联动的实例
2018/01/05 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
详解JavaScript 的变量
2019/03/08 Javascript
解决vue cli使用typescript后打包巨慢的问题
2019/09/30 Javascript
vue设置导航栏、侧边栏为公共页面的例子
2019/11/01 Javascript
uni-app 支持多端第三方地图定位的方法
2020/01/03 Javascript
Python iter()函数用法实例分析
2018/03/17 Python
python解析json串与正则匹配对比方法
2018/12/20 Python
python 对多个csv文件分别进行处理的方法
2019/01/07 Python
Python中的引用知识点总结
2019/05/20 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
在python 中split()使用多符号分割的例子
2019/07/15 Python
Photobook澳大利亚:制作相片书,婚礼卡,旅行相簿
2017/01/12 全球购物
毕业生动漫设计求职信
2013/10/11 职场文书
毕业生求职简历的自我评价
2013/10/23 职场文书
百年校庆节目主持词
2014/03/27 职场文书
党员创先争优公开承诺书
2014/03/28 职场文书
大学生应聘求职信
2014/05/26 职场文书
公司人力资源管理制度
2015/08/05 职场文书
2019大学竞选班长发言稿
2019/06/27 职场文书
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL