📜  PyQtGraph - 设置条形图的光标(1)

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

PyQtGraph - 设置条形图的光标

PyQtGraph是一个用于Python的交互式图形和数据可视化库。它可以创建各种类型的图表,包括条形图。该库还提供了许多功能,例如巨大数据集的高性能渲染和数据的实时更新。

在这篇文章中,我们将探讨如何使用PyQtGraph创建条形图,并添加一个光标以显示数据点的值。这将使图表更具交互性,并允许用户更轻松地识别数据点的值。

安装PyQtGraph

在开始创建条形图之前,我们需要先安装PyQtGraph。可以使用pip安装该库,只需要在命令行中输入以下命令即可:

pip install pyqtgraph
创建条形图

首先,我们需要导入PyQtGraph和PyQt5:

import pyqtgraph as pg
from PyQt5.QtWidgets import QApplication, QMainWindow

接下来,我们创建一个QMainWindow并使用pg.PlotWidget作为中央窗口部件:

app = QApplication([])
window = QMainWindow()
plot_widget = pg.PlotWidget()
window.setCentralWidget(plot_widget)
window.show()

我们现在可以创建一个简单的条形图,该图将显示一些任意数据。在下面的示例中,我们使用pg.BarGraphItem创建一个条形图,该图将显示三个数据点:

data = [("A", 1), ("B", 3), ("C", 2)]
bars = pg.BarGraphItem(x=[i for i in range(len(data))], height=[item[1] for item in data], width=0.6, brush='b')
plot_widget.addItem(bars)

最后,我们可以使用pg.AxisItem添加X和Y轴标签:

x_axis = pg.AxisItem('bottom', showValues=True)
y_axis = pg.AxisItem('left', showValues=True)
plot_widget.getAxis('bottom').setLabel('X Label')
plot_widget.getAxis('left').setLabel('Y Label')

现在,我们已经创建了一个简单的条形图,并且可以看到每个数据点的高度已正确设置。

添加光标

接下来,我们将添加一个光标到图表中。我们将使用pg.InfiniteLine创建一个垂直线,该线将跟踪鼠标光标的位置。然后,我们将更新一个QLabel以显示与数据点相对应的值:

cursor_label = pg.LabelItem(justify='right')
plot_widget.addItem(cursor_label)
v_line = pg.InfiniteLine(angle=90, movable=False)
plot_widget.addItem(v_line)

def move_cursor(event):
    pos = event.pos()
    if plot_widget.sceneBoundingRect().contains(pos):
        mouse_point = plot_widget.plotItem.vb.mapSceneToView(pos)
        index = int(mouse_point.x())
        if 0 <= index < len(data):
            x = index
            y = data[index][1]
            cursor_label.setText(f"<span style='font-size: 12pt'>x={x}, y={y}</span>")
            v_line.setPos(x)

plot_widget.scene().sigMouseMoved.connect(move_cursor)

在这个示例中,我们首先创建了一个LabelItem,用于显示与数据点相对应的值。我们还创建了一个垂直线,该线跟踪光标位置,并在与数据点对齐时显示。move_cursor函数处理sigMouseMoved信号,并计算数据点的位置。然后,它更新LabelItem以显示数据值,并将垂直线位置设置为数据点的X坐标。

完整代码

下面是添加光标之后的完整代码片段:

import pyqtgraph as pg
from PyQt5.QtWidgets import QApplication, QMainWindow

app = QApplication([])

window = QMainWindow()

plot_widget = pg.PlotWidget()
window.setCentralWidget(plot_widget)

data = [("A", 1), ("B", 3), ("C", 2)]
bars = pg.BarGraphItem(x=[i for i in range(len(data))], height=[item[1] for item in data], width=0.6, brush='b')
plot_widget.addItem(bars)

x_axis = pg.AxisItem('bottom', showValues=True)
y_axis = pg.AxisItem('left', showValues=True)
plot_widget.getAxis('bottom').setLabel('X Label')
plot_widget.getAxis('left').setLabel('Y Label')

cursor_label = pg.LabelItem(justify='right')
plot_widget.addItem(cursor_label)
v_line = pg.InfiniteLine(angle=90, movable=False)
plot_widget.addItem(v_line)

def move_cursor(event):
    pos = event.pos()
    if plot_widget.sceneBoundingRect().contains(pos):
        mouse_point = plot_widget.plotItem.vb.mapSceneToView(pos)
        index = int(mouse_point.x())
        if 0 <= index < len(data):
            x = index
            y = data[index][1]
            cursor_label.setText(f"<span style='font-size: 12pt'>x={x}, y={y}</span>")
            v_line.setPos(x)

plot_widget.scene().sigMouseMoved.connect(move_cursor)

window.show()

app.exec_()
结论

在这篇文章中,我们学习了如何使用PyQtGraph创建条形图,并添加一个光标以显示数据点的值。与典型的静态图表相比,交互式图表可以更好地向用户传递意义。这些方法可以帮助我们更好地探索我们的数据并更好地了解它们。