是否可以从matplotlib hist2d获取鼠标事件?

时间:2019-05-30 14:56:40

标签: python matplotlib pyqt mouseevent

我有大量的火车距离-速度数据,我将它们绘制成用python和Qt(每250米仓中5kph仓)编写的matplotlib hist2d来绘制。 目的是从视觉上识别慢点,然后深入研究这些点以调查慢速行驶的火车。

理想情况下,我希望能够单击任何hist2d bin,并获取bin代表的火车的编号和列表。

Matplotlib使用Picker启用某些图形类型的鼠标事件(请参见示例代码),但是我无法修改hist2d代码以使其像示例一样工作。

是否可以从matplotlib hist2d获取鼠标事件?还是有另一种方式来获取对鼠标单击做出响应的二维直方图?

为清楚起见,我使用QtDesigner创建了一个包含QGraphicsView-QGraphicsScene-matplotlib Figure-Canvas-hist2d的窗口。

此处发布了示例代码,其中显示了matplotlib对点击事件的响应, 但是我尝试使其与hist2d而不是plot一起使用的尝试失败了。

import numpy as np
import matplotlib.pyplot as plt

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_title('click on points')

line, = ax.plot(np.random.rand(100), 'o', picker=5)  # 5 points tolerance

def onpick(event):
    thisline = event.artist
    xdata = thisline.get_xdata()
    ydata = thisline.get_ydata()
    ind = event.ind
    points = tuple(zip(xdata[ind], ydata[ind]))
    print('onpick points:', points)

fig.canvas.mpl_connect('pick_event', onpick)

plt.show()

这是我的代码段(不可运行),显示了我如何向该hist2d调用中添加picker参数。即使在添加了picker参数之后,代码仍在运行,但似乎默默地忽略了新参数。

xedges = meter_bins
yedges = velocity_bins
x = df_trips.METERS
y = df_trips.VELOCITY

fig = plt.figure()

plt.hist2d(x, y, bins=(xedges, yedges), picker=5)

fig.canvas.mpl_connect('pick_event', onpick)

第一组代码将由绘图生成的pick_event连接到onpick方法。当我对hist2d执行相同的connect调用时,永远不会调用onpick。我不知道picker是否不适用于hist2d或我做错了。

0 个答案:

没有答案