具有大量数据的平滑matplotlib图(PyQt5)

问题描述 投票:0回答:1

我正在尝试在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。如果我执行主脚本,我获得的是以下内容:

Chart正如你所看到的,matplotlib正试图展示每一点(在大多数情况下都很好),但由于我有很多分数,它看起来很紧,所以看起来很糟糕。

有一种方法可以使它看起来更好吗?,任何帮助或提示?

python matplotlib pyqt5
1个回答
0
投票

不要循环。使用ax.xtick(rotation = 90)进行矢量化旋转调整。

将句柄存储到轴(您已经完成此操作)并在调用figure.draw()之前使用axis.set_xdata和axis.set_ydata。当与Qt一起使用时,Matplotlib可以更新几千点,超过60FPS。

© www.soinside.com 2019 - 2024. All rights reserved.