📜  PyQtGraph - 获取光标到散点图(1)

📅  最后修改于: 2023-12-03 15:18:50.724000             🧑  作者: Mango

PyQtGraph - 获取光标到散点图

在 PyQtGraph 中,可以通过跟踪光标的位置来查看散点图中数据的详细信息。这个功能非常有用,因为它允许用户在鼠标悬停时查看数据,而不必点击图表上的任何一个散点。

实现方法

要实现这个功能,我们需要使用 PyQtGraph 中的 ScatterPlotItemHoverEvent 类。当鼠标悬停在散点图上时,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 信号。随后,创建一个回调函数,以检索光标下的散点并执行一些有效的操作,如在散点图上添加自定义文本。