📅  最后修改于: 2023-12-03 15:18:50.690000             🧑  作者: Mango
PyQtGraph是一个用于创建交互式和实时数据可视化的Python库。它支持2D和3D的绘图,支持多种类型的数据可视化。在此简要介绍如何使用PyQtGraph在散点图上检测光标是否悬停。
在终端输入以下指令:
pip install pyqtgraph
import pyqtgraph as pg
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
class ScatterPlotWidget(pg.GraphicsWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('Scatter Plot')
self.scatter_plot = pg.ScatterPlotItem(pen=pg.mkPen(None), brush=pg.mkBrush(255, 255, 255, 120))
self.addItem(self.scatter_plot)
self.view_box = self.addViewBox()
# 坐标轴设置
self.view_box.setRange(xRange=[-10, 10], yRange=[-10, 10])
self.view_box.setAspectLocked(True)
self.view_box.setMouseEnabled(x=False, y=False)
# 随机生成散点
x = np.random.normal(size=50) * 2.0 + 5.0
y = np.random.normal(size=50) * 2.0 + 0.0
self.scatter_plot.setData(x, y)
# 信号槽连接
self.scene().sigMouseMoved.connect(self.on_mouse_moved)
def on_mouse_moved(self, event):
if self.scatter_plot.hoverPoints is not None:
print(self.scatter_plot.hoverPoints)
if __name__ == '__main__':
app = QtGui.QApplication([])
widget = ScatterPlotWidget()
widget.show()
app.exec_()
代码创建了一个ScatterPlotWidget类,用来处理散点图的创建和光标悬停检测的逻辑。在该类的构造函数中,首先调用基类的构造函数以初始化窗口,然后初始化散点图和视图框。散点图被添加到了视图框中,并随机生成50个点用于绘制。
视图框被设置为对坐标轴进行锁定,这样长宽比将被保留,同时x轴和y轴的范围被初始化为10。调用setMouseEnabled方法使得鼠标不能移动图形,它仅仅响应光标事件,以便能够检测到光标的位置。
最后,我们将信号sigMouseMoved
连接到on_mouse_moved的槽,以便能够检测到光标的位置,并输出当前所指向的散点信息。
当光标移动到任意一个散点上时,鼠标会悬停在其上,并打印出该散点的信息。
## 总结
在本文中,你学习了如何使用PyQtGraph创建散点图,并检测光标是否悬停在散点上,从而让我们能够更好的与我们的数据交互。