簡體   English   中英

具有大量數據的平滑matplotlib圖(PyQt5)

[英]Smooth matplotlib plot with lot of data (PyQt5)

我正在嘗試在matplotlib圖上查看一些數據,這些數據來自我一直在監視的生成器,但是當我使用很多點(每天800點,並且我想顯示一整個月),我很確定有一種方法可以使它看起來更平滑,或者至少可以自動過濾一些點,但是我不確定如何將其應用於PyQT5 Matplotlib小部件。 我使用PyQt5是因為我想使圖具有交互性(激活另一行以顯示按鈕)。

我正在使用帶有Emphy matplotlib畫布的QMainWindow:

    from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1024, 768)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.mplwidget = MatplotlibWidget(self.centralwidget)
        self.mplwidget.setObjectName("mplwidget")
        self.gridLayout.addWidget(self.mplwidget, 0, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Fuel Consumption Chart"))

from matplotlibwidget import MatplotlibWidget

然后,我使用另一個文件來使用該UI並自定義繪圖:

import FuelUI
from PyQt5.QtWidgets import QMainWindow, QApplication
import sys
import datetime as dt
import matplotlib.dates as md
import json
import os
from FuelData import getData
from TempData import getDataTemp

class FuelChart(QMainWindow, FuelUI.Ui_MainWindow):
    def __init__(self, parent = None):
        super(FuelChart, self).__init__(parent)
        self.setupUi(self)

        self.mplwidget.axes.set_xlabel('Time (days)')
        self.mplwidget.axes.set_ylabel('Energy (BTU/h)')
        self.mplwidget.axes.set_title('Fuel Comsumption Chart')
        self.mplwidget.axes.grid(True)
        for tick in self.mplwidget.axes.get_xticklabels():
            tick.set_rotation(90)
        x, y = getData()
        xt, yt = getDataTemp()
        self.mplwidget.axes.plot(x, y, label ='Energy Consumption')
        self.mplwidget.axes.plot(xt, yt, label = 'Hot Water energy production')
        self.mplwidget.axes.legend()
        xformatter = md.DateFormatter('%d')
        self.mplwidget.axes.xaxis.set_major_formatter(xformatter)
        #self.mplwidget.figure.subplots_adjust(bottom=0.21)
        self.mplwidget.show()

if __name__ == "__main__":
    QApplication.setStyle("cleanlooks")
    app = QApplication(sys.argv)
    fuelchart = FuelChart()
    fuelchart.showFullScreen()
    sys.exit(app.exec_())

getData()和getTempData()函數是python庫,可讀取所有已收集數據的json。 如果執行主腳本,將獲得以下內容:

圖表 如您所見,matplotlib試圖顯示每一個要點(在大多數情況下都很好),但是由於我有很多要點,它看起來很緊,因此開始看起來很恐怖。

有一種使它看起來更好的方法嗎,有什么幫助或提示嗎?

不要循環。 使用ax.xtick(rotation = 90)進行矢量化旋轉調整。

存儲軸的句柄(您已經完成此操作),並在調用fig.draw()之前將axis.set_xdata與axis.set_ydata一起使用。 當與Qt一起使用時,Matplotlib可以更新超過60FPS的數千點。

暫無
暫無

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

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