首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在使用QChart x轴时添加指向QDateTimeAxis

如何在使用QChart x轴时添加指向QDateTimeAxis
EN

Stack Overflow用户
提问于 2020-05-07 09:08:22
回答 1查看 1.2K关注 0票数 1

我从这里修改代码

  1. 我尝试使用datetime.timestamp()作为x点,但它不起作用。
  2. 我的总时间是5小时,滴答数是10,我希望每半个小时缩短一次时间,但事实并非如此。
  3. 如何在特定的时间(大概8点45分)在这个曲线图上添加烛台?
代码语言:javascript
复制
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_())

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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,)
  • 使用QDateTime: self.series.append( QtCore.QDateTime.fromString( "202005070849","yyyyMMddhhmm“).toMSecsSinceEpoch(),22,self.series.append( QtCore.QDateTime.fromString( "202005070950","yyyyMMddhhmm”).toMSecsSinceEpoch(),20,) self.series.append( QtCore.QDateTime.fromString( "202005071051","yyyyMMddhhmm“).toMSecsSinceEpoch(),58,)

tickCount表示滴答的总数,滴答间距满足以下条件:

代码语言:javascript
复制
dt = (dmax - dmin) / (tickCount -1)

它从tickCount中减去"1“,因为它还考虑了极端

代码语言:javascript
复制
self.axis_x.setTickCount(11)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61653968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档