用matplotlib绘制十字星光标
在matplotlib中绘制类似股票软件里面的十字星光标比较简单,这里我们来看看几种内置的光标:
1、单子图上面的十字星光标
from matplotlib.widgets import Cursor
import matplotlib.pyplot as plt
import numpy as npfig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)
t = np.arange(0.0, 2.0, 0.01)
ax1.plot(t, np.sin(2*np.pi*t))
ax2.plot(t, np.sin(4*np.pi*t))cursor = Cursor(ax1, useblit=True, color='r', lw=0.5)
plt.show()
看看效果
2、多子图上面同时出现十字星光标
from matplotlib.widgets import Cursor,MultiCursor
import matplotlib.pyplot as plt
import numpy as npfig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)
t = np.arange(0.0, 2.0, 0.01)
ax1.plot(t, np.sin(2*np.pi*t))
ax2.plot(t, np.sin(4*np.pi*t))# cursor = Cursor(ax1, useblit=True, color='r', lw=0.5)
cursor = MultiCursor(fig.canvas, (ax1, ax2), useblit=True, horizOn=True, vertOn=True, color='r', lw=0.5)
plt.show()
结果:
3、单+多十字星光标
这种在股票软件里面很常见,比如同花顺里面,同一日期里面的多个技术指标,他们只有一条水平线,而每个子图里面都有垂直线,找了下matplotlib里面没有这种实现,所以自己写了一个,代码见文后,先看看效果。
# from matplotlib.widgets import Cursor,MultiCursor
import matplotlib.pyplot as plt
import numpy as npfig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)
t = np.arange(0.0, 2.0, 0.01)
ax1.plot(t, np.sin(2*np.pi*t))
ax2.plot(t, np.sin(4*np.pi*t))# cursor = Cursor(ax1, useblit=True, color='r', lw=0.5)
# cursor = MultiCursor(fig.canvas, (ax1, ax2), useblit=True, horizOn=True, vertOn=True, color='r', lw=0.5)
cursor = SingleMultiCursor(fig.canvas, (ax1, ax2), single=0, color='r', lw=0.5)
plt.show()
看看效果
如果把代码中的子图左右排列,并且single的类型改成1,看看效果
# from matplotlib.widgets import Cursor,MultiCursor
import matplotlib.pyplot as plt
import numpy as npfig, (ax1, ax2) = plt.subplots(ncols=2, sharey=True)
t = np.arange(0.0, 2.0, 0.01)
ax1.plot(t, np.sin(2*np.pi*t))
ax2.plot(t, np.sin(4*np.pi*t))# cursor = Cursor(ax1, useblit=True, color='r', lw=0.5)
# cursor = MultiCursor(fig.canvas, (ax1, ax2), useblit=True, horizOn=True, vertOn=True, color='r', lw=0.5)
cursor = SingleMultiCursor(fig.canvas, (ax1, ax2), single=1, color='r', lw=0.5)
plt.show()
附SingleMultiCursor的实现代码:
class SingleMultiCursor():"""一个用于多个子图(横排或者竖排)的十字星光标,可以在多个子图上同时出现single=0表示仅仅一个子图显示水平线,所有子图显示垂直线,用于竖排的子图single=1表示仅仅一个子图显示垂直线,所有子图显示水平线,用于横排的子图注意:为了能让光标响应事件处理,必须保持对它的引用(比如有个变量保存)用法::import matplotlib.pyplot as pltimport numpy as npfig, (ax1, ax2) = plt.subplots(nrows=2, sharex=True)t = np.arange(0.0, 2.0, 0.01)ax1.plot(t, np.sin(2*np.pi*t))ax2.plot(t, np.sin(4*np.pi*t))cursor = SingleMultiCursor(fig.canvas, (ax1, ax2), single=0, color='w', lw=0.5)plt.show()"""def __init__(self, canvas, axes, single=0, **lineprops):self.canvas = canvasself.axes = axesself.single = singleif single not in [0, 1]:raise ValueError('Unrecognized single value: ' + str(single) + ', must be 0 or 1')xmin, xmax = axes[-1].get_xlim()ymin, ymax = axes[-1].get_ylim()xmid = 0.5 * (xmin + xmax)ymid = 0.5 * (ymin + ymax)self.background = Noneself.needclear = Falselineprops['animated'] = True # for bltself.lines = [[ax.axhline(ymid, visible=False, **lineprops) for ax in axes],[ax.axvline(xmid, visible=False, **lineprops) for ax in axes]]self.canvas.mpl_connect('motion_notify_event', self.onmove)self.canvas.mpl_connect('draw_event', self.clear)def clear(self, event):self.background = (self.canvas.copy_from_bbox(self.canvas.figure.bbox))for line in self.lines[0] + self.lines[1]:line.set_visible(False)def onmove(self, event):if event.inaxes is None: returnif not self.canvas.widgetlock.available(self): returnself.needclear = Truefor i in range(len(self.axes)):if event.inaxes == self.axes[i]:if self.single == 0:for line in self.lines[1]:line.set_xdata((event.xdata, event.xdata))line.set_visible(True)line = self.lines[0][i]line.set_ydata((event.ydata, event.ydata))line.set_visible(True)else:for line in self.lines[0]:line.set_ydata((event.ydata, event.ydata))line.set_visible(True)line = self.lines[1][i]line.set_xdata((event.xdata, event.xdata))line.set_visible(True)else:self.lines[self.single][i].set_visible(False)if self.background is not None:self.canvas.restore_region(self.background)for lines in self.lines:for line in lines:if line.get_visible():line.axes.draw_artist(line)self.canvas.blit()
转载请注明出处:https://blog.csdn.net/PeakGao/article/details/105646118
用matplotlib绘制十字星光标相关推荐
- 数据分析-Jupyter,Matplotlib介绍-Matplotlib绘制图形
数据分析 Jupyter介绍 Jupyter Notebook是以网页的形式打开,可以在网页页面中直接编写代码和运行代码,代码的运行结果也会直接在代码块下显示的程序.如在编程过程中需要编写说明文档,可 ...
- matplotlib绘制图表,设置刻度标签、最大最小刻度、字体大小,label位置、刻度轴箭头等
matplotlib绘制图表,设置刻度标签.最大最小刻度.字体大小,label位置.刻度轴箭头等 1. 效果图 2. 源码 2.1 仅使用普通轴ax + fontdict 源码 2.2 使用mpl设置 ...
- 使用KMeanCluster对多个区域进行聚类,并结合Matplotlib绘制中心点、最大最小距离点
使用KMeanCluster对多个区域进行聚类,并结合Matplotlib绘制中心点.最大最小距离点 1. 效果图 2. 源码 2.1 原始数据--xq.txt 2.2 源码 参考 这篇博客将演示如何 ...
- Matplotlib绘制象限图——支持中文、箭头、自定义轴线交点
Matplotlib绘制象限图--支持中文.箭头.自定义轴线交点 1. 效果图 2. 原理 2.1 绘制象限图步骤 2.1 添加文字到图表 3. 源码 参考 这篇博客将介绍如何使用matplotlib ...
- python绘制三维轨迹_Python学习(一) —— matplotlib绘制三维轨迹图
在研究SLAM时常常需要对其输出的位姿进行复现以检测算法效果,在ubuntu系统中使用Python可以很好的完成相关的工作. 一. Ubuntu下Python的使用 在Ubuntu下使用Python有 ...
- python使用matplotlib绘制一条正弦曲线(plot函数可视化sine plot)
python使用matplotlib绘制一条正弦曲线(plot函数可视化sine plot) 目录 python使用matplotlib绘制一条正弦曲线(plot函数可视化sine plot) #导入 ...
- Python使用matplotlib绘制透明背景的可视化图像并保存透明背景的可视化结果(transparent background)
Python使用matplotlib绘制透明背景的可视化图像并保存透明背景的可视化结果(transparent background) 目录
- Python使用matplotlib绘制分组对比柱状图(bar plot)可视化时汉语(中文)标签显示成了框框□□、什么情况、我们有解决方案
Python使用matplotlib绘制分组对比柱状图可视化时(bar plot)汉语(中文)标签显示成了框框□□.什么情况.我们有解决方案 目录
- Python使用matplotlib绘制数据去重前后的柱状图对比图(在同一个图中显示去重操作之后同一数据集的变化情况)
Python使用matplotlib绘制数据去重前后的柱状图对比图(在同一个图中显示去重操作之后同一数据集的变化情况) #仿真数据 import pandas as pd import numpy a ...
最新文章
- 5行Python实现验证码识别,太稳了
- nginx mysql设置远程连接超时_docker -mysql服务设置远程连接 解决1251 client does not support ..问题...
- linux bashrc与profile的区别
- FlashInspector 【Firefox浏览器插件,flash分析工具】
- tomcat如何部署.net程序_.NET 程序员如何学习Vue
- python3常用模块_Python3 常用模块
- .NET 5 开发WPF - 美食应用登录UI设计
- Java中的生成器设计模式
- oracle查询大小写敏感参数,让Oracle 大小写敏感 表名 字段名 对像名
- java.lang.NoClassDefFoundError: org/springframework/core/ErrorCoded
- python-运算符之算术运算符
- C# VS 调试 动态加载的 DLL
- ASP.NET(C#版) FileUpload控件
- html5妇女节游戏,2020三八妇女节趣味游戏大全_妇女节可以举办哪些活动
- 如果出现 Cause: java.lang.ClassNotFoundException: Cannot find class: com.itheima.domian.User
- word图片另存为变黑色_Word的图片另存为图片格式的方法
- 由偷菜/抢车位引发的思考
- 详解:S锁(读锁)和X锁(写锁)
- LTE学习:PHICH(二)
- 6个简单好用的收件箱清理及管理工具
热门文章
- 微信发ascii_字母D的ASCII编码是( )。
- m1 python安装scipy失败
- 添加数量的html标签,dedecms织梦模板栏目列表中添加统计文档数量的标签
- 办公软件excel表格_钢筋算量Excel表格,现场算钢筋,效率可与大型软件相比
- Nginx 和 GeoIP 模块的使用
- WIFI中的DCA信道和EIRP功率
- 武汉高职高专计算机专业分数线,武汉高职高专学校有哪些及分数线
- DWZ excel文件导出(全过程)
- 为何当初龙芯要用MIPS架构,而不是ARM或X86架构?
- lisp绘制直齿圆柱齿轮_lisp制作渐开线齿轮.doc