我想让在我的散点图中按下一个点时可以显示值。在这里找到了解决方案:将鼠标悬停在 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()
Run Code Online (Sandbox Code Playgroud)
它解决了我的问题。但我不明白是怎么回事,我一直在谷歌上搜索,没有任何运气。我知道如何用 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属性没有很好的文档记录,但这主要是因为并非所有艺术家实际上都将此属性注册到事件中。
| 归档时间: |
|
| 查看次数: |
9352 次 |
| 最近记录: |