📅  最后修改于: 2023-12-03 15:18:50.724000             🧑  作者: Mango
在 PyQtGraph 中,可以通过跟踪光标的位置来查看散点图中数据的详细信息。这个功能非常有用,因为它允许用户在鼠标悬停时查看数据,而不必点击图表上的任何一个散点。
要实现这个功能,我们需要使用 PyQtGraph 中的 ScatterPlotItem
和 HoverEvent
类。当鼠标悬停在散点图上时,ScatterPlotItem
将发出 HoverEvent
信号,我们可以利用该信号来获取光标下的数据。
import pyqtgraph as pg
def on_hover(plot, points, _):
# points 是光标下的散点数据
print(points)
plot = pg.plot()
scatter = pg.ScatterPlotItem()
scatter.setPoints([{'pos': (0, 0)}, {'pos': (1, 1)}, {'pos': (2, 4)}])
scatter.sigHoverEvent.connect(on_hover)
plot.addItem(scatter)
在上面的代码中,我们创建了一个 ScatterPlotItem
成功,并将其添加到了 pg.plot()
的返回值上。我们还将 sigHoverEvent
信号与 on_hover
回调函数连接起来。当鼠标悬停在散点图上方时,on_hover
将被调用,并将 points
参数设置为光标下的数据。
上面的示例非常简单,只展示了如何获取光标下的数据,而没有显示任何有用的东西。为了使其更实用,我们将添加一些更复杂的示例代码:当用户悬停在散点图上方时,将显示一些自定义文本,显示散点图的值和标签。
def on_hover(plot, points, _):
for point in points:
# 获取散点的位置和值
pos = point.pos()
value = point.data()[1]
# 创建一个文本项并添加到散点图上
label = pg.TextItem(
f'({pos[0]:.2f}, {pos[1]:.2f}): {value}',
anchor=(0, 1),
angle=0,
color=(200, 200, 200),
fill=(0, 0, 0, 100),
border=None,
)
label.setPos(pos)
plot.addItem(label)
plot = pg.plot()
scatter = pg.ScatterPlotItem()
scatter.setPoints([{'pos': (0, 0), 'data': ('a1', 2)}, {'pos': (1, 1), 'data': ('a2', 4)}, {'pos': (2, 4), 'data': ('a3', 8)}])
scatter.sigHoverEvent.connect(on_hover)
plot.addItem(scatter)
在上面的代码中,我们在 on_hover
回调函数中循环遍历光标下的每个散点,并使用 pos()
方法获取其位置。我们还使用 data()
方法获取每个散点的值和标签,并在散点图上创建一个文本项。
在 PyQtGraph 中,我们可以很容易地查看散点图中的数据。只需将 ScatterPlotItem
添加到 pg.plot()
返回值中,并连接 sigHoverEvent
信号。随后,创建一个回调函数,以检索光标下的散点并执行一些有效的操作,如在散点图上添加自定义文本。