matplotlib键盘鼠标事件(tcy)
发布日期:2021-06-29 14:48:01 浏览次数:2 分类:技术文章

本文共 4904 字,大约阅读时间需要 16 分钟。

键盘鼠标事件:2018/10/24   https://matplotlib.org/users/event_handling.html?highlight=event%20inaxes      1.1.鼠标事件# 当鼠标在子图范围内产生动作时,将触发鼠标事件,鼠标事件分为三种:    botton_press_event:   鼠标按下时触发    botton_release_event: 鼠标释放时触发    motion_notify_event:  时间移动时触发    1.2.鼠标事件的相关信息可以通过event对象的属性获得:    name:        事件名    button:     鼠标按键,1,2,3表示左中右按键,None表示没有按键    x,y:        表示鼠标在图表中的像素坐标    xdata,ydata:鼠标在数据坐标系的坐标

2.实例1:鼠标点选事件

from matplotlib import pyplot as pltimport numpy as npfig,ax = plt.subplots()ax.plot(np.random.random(100), 'o', picker=5) # 5 points tolerancetext=ax.text(0.5,0.5,'event',ha='center',va='center',fontdict={'size':20})def on_pick(event):line = event.artistxdata, ydata = line.get_data()ind = event.indprint('on pick line:', ind,np.array([xdata[ind], ydata[ind]]).T)info = "Name={};button={};\n(x,y):{},{}(Dx,Dy):{:3.2f},{:3.2f}".format(        event.name, event.button, event.x, event.y, event.xdata,event.ydata)     text.set_text(info)cid = fig.canvas.mpl_connect('pick_event', on_pick)plt.show()

实例2:鼠标单击事件--事件内绘制图形,显示单击坐标值

from matplotlib import pyplot as pltimport numpy as npfig,ax = plt.subplots()ax1 = fig.add_subplot(121, title='title1', label='label1')line=ax1.plot(np.random.rand(10),label='newline1', picker=5)#picker鼠标单选事件ax1.legend()ax2=fig.add_subplot(122, title='title2', label='label2')def onclick(event):    a=np.arange(10)    #fig= event.inaxes.figure#当鼠标出现在axes外部时报空值错误;改用下面语句    fig = event.canvas.figure    global ax2    # ax2 = fig.add_subplot(122, title='title2', label='label2')#将报警;解决办法移到本函数外部    ax=fig.sca(ax2)                                           #切换到axex2    ax.cla()                                                       #清理之前绘画    line,=ax.plot(np.random.rand(10)+10, label='newline2', picker=5)#picker鼠标单选事件    ax.legend()    fig.canvas.draw()    fx=event.xdata if event.xdata else 0    fy=event.ydata if event.xdata else 0    print('%s click: button=%d, x=%d, y=%d, xdata=%f, ydata=%f' %#x,y像素;xdata,ydata数据坐标          ('double' if event.dblclick else 'single', event.button,event.x, event.y, fx, fy))
def figure_enter(event):    print('figure enter...')def figure_leave(event):    print('figure leave...')def pick(event):    print('pick event...')cid = fig.canvas.mpl_connect('button_press_event', onclick)cid21 = fig.canvas.mpl_connect('figure_enter_event', figure_enter)cid22 = fig.canvas.mpl_connect('figure_leave_event', figure_leave)cid3 = fig.canvas.mpl_connect('pick_event', pick)plt.show()
示例3:每次按下鼠标时都会创建一个简单的线段:from matplotlib import pyplot as pltclass LineBuilder:    def __init__(self, line):        self.line = line        self.xs = list(line.get_xdata())        self.ys = list(line.get_ydata())        self.cid = line.figure.canvas.mpl_connect('button_press_event', self)    def __call__(self, event):        print('click', event)        if event.inaxes!=self.line.axes: return        self.xs.append(event.xdata)        self.ys.append(event.ydata)        self.line.set_data(self.xs, self.ys)        self.line.figure.canvas.draw()fig = plt.figure()ax = fig.add_subplot(111)ax.set_title('click to build line segments')line, = ax.plot([0], [0])  # empty linelinebuilder = LineBuilder(line)plt.show()

 

结果显示:click MPL MouseEvent: xy=(222,370) xydata=(-0.023508064516129037,0.039404761904761915)button=1 dblclick=False inaxes=AxesSubplot(0.125,0.11;0.775x0.77)

 

https://matplotlib.org/users/event_handling.html?highlight=event%20inaxes# 响应键盘事件  2018/10/24# 界面事件绑定都是通过Figure.canvas.mpl_connect()进行,参数1为事件名,参数2为事件响应函数# 为了在Notebook中执行本节代码,需要启动GUI时间处理线程,需要执行%gui qt %matplotlib qt语句'''实例1:'''# 当程序运行后,当输入rgbcmyk键时曲线颜色依次改变。import matplotlib.pyplot as pltimport numpy as np    # fig=plt.gcf()# ax=plt.gca()fig, ax = plt.subplots()x = np.linspace(0, 10, 10000)line, = ax.plot(x, np.sin(x))   def on_key_press(event):    if event.key in "rgbcmyk":        line.set_color(event.key)    fig.canvas.draw_idle()   fig.canvas.mpl_disconnect(fig.canvas.manager.key_press_handler_id)fig.canvas.mpl_connect('key_press_event', on_key_press)plt.show()----------------------------------------------------------------------------------'''实例2:'''# matplotlib的Event框架将key-press-event或mouse-motion-event这样UI事件映射到KeyEvent或MouseEvent类。# 下面的示例代码演示了当用户键入‘t’时,对Axes窗口中的线段进行显示开关。# https://blog.csdn.net/qq_27825451/article/details/81481534?utm_source=copyimport numpy as npimport matplotlib.pyplot as plt   def on_press(event):    if event.inaxes is None:        return    print('you pressed', event.key, event.xdata, event.ydata)#鼠标位置    #输出按下的键you pressed d 0.6286290322580645 0.1795013359436373       for line in event.inaxes.lines:        if event.key=='t':            visible = line.get_visible()            line.set_visible(not visible)      event.inaxes.figure.canvas.draw()  fig, ax = plt.subplots(1)fig.canvas.mpl_connect('key_press_event', on_press)  ax.plot(np.random.rand(2, 20))plt.show()---------------------------------------------------------------------------------

转载地址:https://chunyou.blog.csdn.net/article/details/84777736 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:pandas 学习汇总9 - Series系列,DataFrame数据帧 属性( tcy)
下一篇:pandas 学习汇总8 - Series系列,DataFrame数据帧添加删除(行列)( tcy)

发表评论

最新留言

不错!
[***.144.177.141]2024年04月09日 18时24分41秒