coding environment is pyside6+python3.8+win
I tried to draw test data in a QScatterSeries chart, to draw X axis with QDateTimeAxis and Y axis with QScatterSeries. Test data range is [-15.00, 0.00]. However, the real minimum and maximum is still set as Y range by pyside, even I called setRange() every time when I append one point into QScatterSeries. In demo code, test data are as following,
data :-10.0
data :-9.9
data :-9.8
data :-9.7
data :-9.6
data :-9.5
data :-9.4
data :-9.3
data :-9.2
data :-9.1
When I run the application, the first point (-10.0, 30 05:04:33.030), also with minumum Y value, is still showed at coordinate origin. That is to say, the application seems to adjust both max/min value as [-9.1, -10.0] and even the real interval between two points(see gap between -10.0 and -9.9, really larger than I expected in code). The following is demo code,
import os
import sys
import PySide6
from PySide6.QtWidgets import QApplication, QMainWindow
from PySide6.QtGui import QGuiApplication
from PySide6.QtCore import Qt,QDate, QTime, QDateTime, QTimer
from PySide6.QtCharts import QChart,QChartView, QScatterSeries, QDateTimeAxis, QValueAxis
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("My app")
self.mainchart = QChart()
self.mainview = QChartView(self.mainchart)
self.setCentralWidget(self.mainview)
currScreen = QGuiApplication.primaryScreen().geometry()
currWidth = currScreen.width()
currHeight = currScreen.height()
self.resize(currWidth*1/2, currHeight*1/2)
def Draw(self):
#here is data in X axis to be show (demo data)
outputsize = 10
outputtime=['2023/04/30 05:04:33.020',
'2023/04/30 05:04:33.030',
'2023/04/30 05:04:33.040',
'2023/04/30 05:04:33.050',
'2023/04/30 05:04:33.060',
'2023/04/30 05:04:33.070',
'2023/04/30 05:04:33.080',
'2023/04/30 05:04:33.090',
'2023/04/30 05:04:33.100',
'2023/04/30 05:04:33.110']
self.data1 = QScatterSeries()
self.data2 = QScatterSeries()
self.axis_X = QDateTimeAxis()
self.axis_X.setFormat("dd hh:mm:ss")
self.axis_Y = QValueAxis()
self.axis_Y.setTitleText("Test result")
#set range from -15.00 to 0.00
self.axis_Y.setMax(0.00)
self.axis_Y.setMin(-15.00)
#to solve "Python int too large" issue, minus offset here
index_s = 0
ftmstr = outputtime[0]
tm_x = QDateTime.fromString(ftmstr, "yyyy/MM/dd hh:mm:ss.zzz")
index_s = tm_x.toMSecsSinceEpoch()
#here set outputcat = 1 for demo
outputcat = 1
for i in range(outputsize):
ftmstr = outputtime[i]
tm_x = QDateTime.fromString(ftmstr, "yyyy/MM/dd hh:mm:ss.zzz")
tm_offset = tm_x.toMSecsSinceEpoch()-index_s+100
y = -10.0 + i/10.0
print("data :"+str(y))
if 1 == outputcat:
self.data1.append(tm_offset, y)
elif 2 == outputcat:
self.data2.append(tm_offset, y)
else:
self.data2.append(tm_offset, y)
#set range once we call append()
self.axis_X.setRange(QDateTime.fromMSecsSinceEpoch(100+index_s),QDateTime.fromMSecsSinceEpoch(tm_offset+index_s))
y_m, y_M = min(y, self.axis_Y.min()), max(y, self.axis_Y.max())
self.axis_Y.setRange(y_m, y_M)
self.mainchart.addSeries(self.data1)
self.mainchart.addSeries(self.data2)
self.data1.attachAxis(self.axis_X)
self.data2.attachAxis(self.axis_X)
self.data1.attachAxis(self.axis_Y)
self.data2.attachAxis(self.axis_Y)
self.mainchart.addAxis(self.axis_X, Qt.AlignBottom)
self.mainchart.addAxis(self.axis_Y, Qt.AlignLeft)
app = QApplication(sys.argv)
window = MainWindow()
window.Draw()
window.show()
app.exec()