我有大量的火车距离-速度数据,我将它们绘制成用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或我做错了。