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 相关文章推荐
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
Jul 04 Python
python获取当前日期和时间的方法
Apr 30 Python
在Windows服务器下用Apache和mod_wsgi配置Python应用的教程
May 06 Python
pygame 精灵的行走及二段跳的实现方法(必看篇)
Jul 10 Python
python实现快速排序的示例(二分法思想)
Mar 12 Python
redis之django-redis的简单缓存使用
Jun 07 Python
Python实现处理逆波兰表达式示例
Jul 30 Python
解决python线程卡死的问题
Feb 18 Python
python实现扫雷游戏
Mar 03 Python
opencv python在视屏上截图功能的实现
Mar 05 Python
基于tf.shape(tensor)和tensor.shape()的区别说明
Jun 30 Python
Biblibili视频投稿接口分析并以Python实现自动投稿功能
Feb 05 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分页显示制作详细讲解
2006/12/05 PHP
php中explode与split的区别介绍
2012/10/03 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
2014/11/19 PHP
一个简单至极的PHP缓存类代码
2015/10/23 PHP
php中foreach结合curl实现多线程的方法分析
2016/09/22 PHP
Dom与浏览器兼容性说明
2010/10/25 Javascript
分享10个原生JavaScript技巧
2015/04/20 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
详解webpack 多页面/入口支持&公共组件单独打包
2017/06/29 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
Postman如何实现参数化执行及断言处理
2020/07/28 Javascript
python脚本实现分析dns日志并对受访域名排行
2014/09/18 Python
在Django的视图中使用数据库查询的方法
2015/07/16 Python
Python字符串拼接、截取及替换方法总结分析
2016/04/13 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
利用python-docx模块写批量生日邀请函
2019/08/26 Python
Python 使用type来定义类的实现
2019/11/19 Python
numpy.ndarray 实现对特定行或列取值
2019/12/05 Python
使用Python的Turtle库绘制森林的实例
2019/12/18 Python
Python如何使用字符打印照片
2020/01/03 Python
Python接口测试文件上传实例解析
2020/05/22 Python
解决python图像处理图像赋值后变为白色的问题
2020/06/04 Python
Python实现打包成库供别的模块调用
2020/07/13 Python
《三峡》教学反思
2014/03/01 职场文书
国窖1573广告词
2014/03/21 职场文书
法制宣传教育方案
2014/05/09 职场文书
白莲教口号
2014/06/18 职场文书
公司收款委托书范本
2014/09/20 职场文书
工作违纪检讨书范文
2015/01/26 职场文书
竞聘开场白方式有哪些?
2019/08/28 职场文书
Python中X[:,0]和X[:,1]的用法
2021/05/10 Python
Mysql分库分表之后主键处理的几种方法
2022/02/15 MySQL