Как сделать подписи по оси X строковыми данными (символами)?
Как сделать по оси X строковые данные (символы),
используя библиотеку PyQtGraph и Qt Designer?
Я хочу по оси X прописать текущее системное время.
main.py:
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
from PyQt5 import QtCore, QtGui, QtWidgets
import pyqtgraph as pg
pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.graph = PlotWidget(self.centralwidget)
self.graph.setGeometry(QtCore.QRect(70, 30, 641, 461))
self.graph.setObjectName("graph")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
listX = [0, 1, 2, 3, 4, 5]
listT1 = [0, 1, 2, 3, 4, 5]
listT2 = ['A1', 'B2', 'C3', '4', '5', '6']
self.graph.showGrid(x = True, y = True)
self.graph.addLegend()
self.graph.setLabel('left', 'Температура', units = '°C')
self.graph.setLabel('bottom', 'Дата')
self.graph.plot(listX, listT1, pen = pg.mkPen('b', width=2), name = 'T1')
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
from pyqtgraph import PlotWidget
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Я не уверен, что правильно понял вас. Вы писали, что хотите по оси X прописать текущее системное время.
Попробуйте так:
main.py:
from datetime import datetime
from PyQt5 import QtCore, QtGui, QtWidgets
import pyqtgraph as pg
pg.setConfigOption('background', 'w')
pg.setConfigOption('foreground', 'k')
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 480)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.graphWidget = PlotWidget(self.centralwidget)
self.graphWidget.setGeometry(QtCore.QRect(89, 59, 471, 291))
self.graphWidget.setObjectName("graphWidget")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 631, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
from pyqtgraph import PlotWidget
class TimeAxisItem(pg.AxisItem):
def tickStrings(self, values, scale, spacing):
#print(f'{values}')
return [datetime.fromtimestamp(value) for value in values]
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.setupUi(self)
grid = QtWidgets.QGridLayout(self.centralwidget)
grid.setContentsMargins(0, 0, 0, 0)
list_x = [
datetime(2025, 3, 17, 1, 40, 0),
datetime(2025, 3, 17, 3, 40, 0),
datetime(2025, 3, 17, 5, 40, 0),
datetime(2025, 3, 17, 7, 40, 0),
datetime(2025, 3, 17, 9, 40, 0),
datetime(2025, 3, 17, 10, 40, 0),
]
list_y = [0, 1, 2, 3, 4, 5]
self.date_axis = TimeAxisItem(orientation='bottom')
self.graphWidget = pg.PlotWidget(
axisItems = {'bottom': self.date_axis},
title= 'Hello World')
self.graphWidget.addLegend(offset=(10, 10))
self.graphWidget.plot(
x=[x.timestamp() for x in list_x],
y=list_y,
pen=None,
name="_name",
symbol='o'
)
grid.addWidget(self.graphWidget, 0, 0)
self.graphWidget.showGrid(x = True, y = True)
self.graphWidget.setLabel('left', 'Температура', units = '°C')
self.graphWidget.setLabel(
'bottom',
'Дата/Time',
units='текущее системное время',
)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
