繁体   English   中英

了解matplotlib事件处理:什么是event和mpl_connect?

[英]Understanding matplotlib event handling: what are event and mpl_connect?

我想使在散点图中按一个点时显示值成为可能。 找到解决方案的地方: 将鼠标悬停在matplotlib中的某个点上时是否可以显示标签?

解:

from matplotlib.pyplot import figure, show
import numpy as npy
from numpy.random import rand


# picking on a scatter plot (matplotlib.collections.RegularPolyCollection)

x, y, c, s = rand(4, 100)
def onpick3(event):
    ind = event.ind
    print 'onpick3 scatter:', ind, npy.take(x, ind), npy.take(y, ind)

fig = figure()
ax1 = fig.add_subplot(111)
col = ax1.scatter(x, y, 100*s, c, picker=True)
#fig.savefig('pscoll.eps')
fig.canvas.mpl_connect('pick_event', onpick3)

show()

它解决了我的问题。 但我不知道该怎么做,我一直在四处寻找运气。 我知道如何使用matplotlib进行绘图,所以这不是我所缺乏的知识。

我不明白的一件事是onpick3(event)函数。 什么是事件参数? 因为该函数本身是在没有任何给定参数的情况下进一步调用的: fig.canvas.mpl_connect('pick_event', onpick)

mpl_connect将信号连接到插槽。 在这种情况下,插槽为onpick3
请注意,未调用该插槽,即语法

fig.canvas.mpl_connect('pick_event', onpick3)
不是
  fig.canvas.mpl_connect('pick_event', onpick3() 

仅在信号触发后(鼠标在画布上单击)时才调用它。 此时,基础event在函数调用中作为参数提供。

一旦尝试定义不带参数的插槽,您将看到。 这将导致错误,例如onpick3 expects 0 arguments but got 1左右。

您可以在matplotlib 事件处理页面上找到详细信息。 event本身是matplotlib.backend_bases.PickEvent的实例。 .ind属性的文献记录不充分,但这主要是因为并非所有艺术家实际上都在事件中注册了该属性。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM