Я пытаюсь просмотреть некоторые данные на графике matplotlib, данные взяты из генератора, который я отслеживал, но линия графика выглядит ужасно, так как я использую много точек (800 в день, и яя хочу показать весь месяц), я почти уверен, что есть способ сделать его более плавным или, по крайней мере, автоматически отфильтровать некоторые точки, но я не уверен, как применить его к виджету PyQT5 Matplotlib.Я использую PyQt5, потому что я хочу сделать график интерактивным (активировать другие строки для отображения с помощью кнопок).
Я использую QMainWindow с холстом emphy matplotlib:
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
Затем я использую другой файл для использования этого пользовательского интерфейса и настройки своего графика:
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 пытается показать каждую точку (что хорошо в большинстве случаев),но так как у меня много очков, он выглядит довольно плотно, поэтому он начинает выглядеть ужасно.
Есть способ сделать его лучше? Любая помощь или подсказка?