我从这里修改代码
datetime.timestamp()作为x点,但它不起作用。import random, datetime
from PySide2 import QtCore, QtGui, QtWidgets
from PySide2.QtCharts import QtCharts
from PySide2.QtCore import QPointF, Qt
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.plot = QtCharts.QChart()
self.chart_view = QtCharts.QChartView(self.plot)
self.setCentralWidget(self.chart_view)
self.series = QtCharts.QLineSeries()
self.candle_series = QtCharts.QCandlestickSeries()
self.series.setName("Magnitude")
self.plot.addSeries(self.series)
self.plot.addSeries(self.candle_series)
# self.plot.createDefaultAxes()
# self.plot.legend().hide()
self.candle_series.setDecreasingColor(Qt.green)
self.candle_series.setIncreasingColor(Qt.red)
# Setting X-axis
self.axis_x = QtCharts.QDateTimeAxis()
self.axis_x.setTickCount(11)
self.axis_x.setLabelsAngle(70)
self.axis_x.setFormat("h:mm")
self.axis_x.setTitleText("Date")
self.axis_x.setMax(datetime.datetime.strptime('202005071345','%Y%m%d%H%M'))
self.axis_x.setMin(datetime.datetime.strptime('202005070845','%Y%m%d%H%M'))
# Setting Y-axis
self.axis_y = QtCharts.QValueAxis()
self.axis_y.setTickCount(7)
self.axis_y.setLabelFormat("%i")
self.axis_y.setTitleText("Temperature [celcious]")
self.axis_y.setMax(60)
self.axis_y.setMin(10)
self.plot.setAxisX(self.axis_x, self.series)
self.plot.setAxisY(self.axis_y, self.series)
self.plot.setAxisX(self.axis_x,self.candle_series)
self.plot.setAxisY(self.axis_y,self.candle_series)
self.candle_series.append(QtCharts.QCandlestickSet(30,50,20,25))
self.series.append(float(QtCore.QDateTime.fromString("202005070849", "yyyyMMddhhmm").toMSecsSinceEpoch()),22,)
self.series.append(float(QtCore.QDateTime.fromString("202005070950", "yyyyMMddhhmm").toMSecsSinceEpoch()),20,)
self.series.append(float(QtCore.QDateTime.fromString("202005071051", "yyyyMMddhhmm").toMSecsSinceEpoch()),58,)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
window = MainWindow()
window.resize(640, 480)
window.show()
sys.exit(app.exec_())

发布于 2020-05-07 12:39:22
根据医生们
datetime.timestamp() 返回对应于datetime实例的POSIX时间戳。返回值是一个浮点数,类似于time.time()返回的值。 假定朴素的datetime实例表示本地时间,此方法依赖platform C mktime()函数来执行转换。由于datetime在许多平台上支持的值范围比mktime()更广,因此这种方法可能会在过去或将来的很长时间内引发OverflowError。 对于知道的datetime实例,返回值计算为: (dt -日期时间(1970,1,1,tzinfo=timezone.utc)).total_seconds()
从计算时差(以秒为单位)中可以看出,但根据医生们,时间是以毫秒为单位的:
..。 QDateTimeAxis可以与任何QXYSeries一起使用。要向该系列添加数据点,请使用
QDateTime::toMSecsSinceEpoch(): ..。
考虑到上述情况,有两种可能的解决办法:
timestamp()乘以1000以获得毫秒数:
self.series.append( datetime.datetime.strptime("202005070849","%Y%m%d%H%M").timestamp() * 1000,22 ) self.series.append( datetime.datetime.strptime("202005070950","%Y%m%d%H%M").timestamp() * 1000,20,self.series.append( datetime.datetime.strptime("202005071051","%Y%m%d%H%M").timestamp() * 1000,58,)tickCount表示滴答的总数,滴答间距满足以下条件:
dt = (dmax - dmin) / (tickCount -1)它从tickCount中减去"1“,因为它还考虑了极端
self.axis_x.setTickCount(11)

https://stackoverflow.com/questions/61653968
复制相似问题