簡體   English   中英

使用 pyqt 創建條形圖

[英]Creating a Barplot using pyqt

我需要用 pyqtgraph 繪制動畫條形圖。 動畫我的意思是一個圖表,它更新他由串行端口給出的值。 現在,一個沒有動畫的情節就足夠了。 我想實現一個看起來像這樣的情節:

水平條形圖

我的輸入數據在一個字典中給出,如下所示:(Key=Timestamp, Value=Event)

{1604496095: 0, 1604496096: 4, 1604496097: 6, 1604496098: 8, 1604496099: 9, 1604496100: 7, 1604496101: 8 ... }

不幸的是,我無法提供很多代碼,因為我無法創建與圖片中類似的圖表。 到目前為止我只有相應的窗口

那是我現在的窗口:

from PyQt5 import QtGui, QtWidgets, QtCore
import pyqtgraph as pg
import sys

class Plotter(QtWidgets.QMainWindow):
    def __init__(self, *args):
        QtWidgets.QMainWindow.__init__(self, *args)
        self.setWindowTitle("Test-Monitor")
        self.setMinimumSize(QtCore.QSize(800, 400))
        self.setupUI()

    def setupUI(self):
        self.plot = pg.PlotWidget()
        self.plot.showGrid(x=True, y=True)
        self.plot.setLabel('left', 'Event')
        self.plot.setLabel('bottom', 'Time')

        self.setCentralWidget(self.plot)


app = QtWidgets.QApplication(sys.argv)
plotter = Plotter()
plotter.show()
app.exec_()

我很欣賞一個使用接近圖片的 pyqtgraph 的代碼示例。

您可以使用BarGraphItem ,並使用值數組添加所有“條”(或添加單個 BarGraphItem,如果您願意):

    def buildData(self, data):
        stamps = sorted(data.keys())
        zero = min(stamps)
        x0 = []
        y0 = []
        width = []
        brushes = []
        for i, stamp in enumerate(stamps):
            try:
                nextStamp = stamps[i + 1]
            except:
                nextStamp = stamp + 1
            x0.append(stamp - zero)
            y0.append(data[stamp])
            width.append(nextStamp - stamp)
            brushes.append(QtGui.QColor(QtCore.Qt.GlobalColor(data[stamp])))

        barItem = pg.BarGraphItem(x0=x0, y0=y0, width=width, height=1, 
            brushes=brushes)
        self.plot.addItem(barItem)

請注意,僅出於本示例的目的,使用Qt.GlobalColor選擇畫筆顏色,您可能應該使用字典或基於值返回顏色的函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM