代码之家  ›  专栏  ›  技术社区  ›  johnashu

PyqtChart不显示数据

  •  1
  • johnashu  · 技术社区  · 8 年前

    我一直在尝试使用PyqChart构建图表。

    我一直在遵循这一实现,这是我想要生成的。

    https://doc.qt.io/qt-5/qtcharts-datetimeaxis example.html

    图表显示但缺少数据和X轴。

    如何获取X轴上显示的日期时间和绘图上显示的数据?

    从pyqt5.qtchart导入* 从pyqt5.qtgui导入* 从pyqt5.qtcore导入* 从pyqt5.qtwidgets导入* 从日期时间导入日期时间作为dt A=Q应用([]) #https://doc.qt.io/qt-5/qtcharts-datetimeaxis-example.html X=['2018-07-01 13:06:38'、'2018-07-01 12:46:38'、'2018-07-01 12:36:38'、'2018-07-01 12:26:38'、'2018-07-01 12:16:38'、'2018-07-01 12:06:38'、'2018-07-01 11:56:38'、'2018-07-01 11:46:38'、'2018-07-01 11:36:38'、'2018-07-01 11:26:38'、'2018-07-01 10:56:38'、'2018-07-01 10:46:38'、'2018-07-01 10:36:38'] Y=[23.5、20.8、28.0、28.1、28.0、27.8、27.3、27.2、25.7、24.7、25.0、25.0、24.9] #图表类型 系列=QlineSeries() #创建图表并设置常规图表设置 图表=Qchart() Chart.AddSeries(系列) chart.settitle(摄氏温度记录) chart.setAnimation选项(qchart.series动画) #X轴设置 axisx=qdatetimeaxis()。 axisx.settickcount(10个) axisx.setformat(“dd hh-mm”)https://doc.qt.io/qt-5/qdatetime.html_toString-2 axisx.settitletext(“天”) Chart.Addaxis(轴x,qt.AlignBottom) 系列.attachaxis(axisx) #Y轴设置 axisy=qvalueaxis()。 axisy.setlabelformat(“%i”)。 axisy.settitletext(“温度C”) 图表.添加轴(轴,qt.左对齐) 系列.附件(轴) #使用Qchart作为参数创建QchartView对象。这样我们就不需要自己创建QgraphicsView场景。我们还将“反锯齿”设置为使渲染的线条看起来更好。 ChartView=QChartView(图表) chartview.setrenderInt(qpaint.antialising) chart.createDefaultAxes()。 图表.axisy(系列).setrange(min(y)-5,max(y)+5) Chart.Legend().SetVisible(真) Chart.Legend().SetAlignment(qt.AlignBottom) ChartView=QChartView(图表) chartview.setrenderInt(qpaint.antialising) 窗口=qmainwindow()) window.setcentralwidget(图表视图) 窗口。调整大小(600,300) window.show()。 A.执行官

    图表显示,但缺少数据和X轴。

    如何获取X轴上显示的日期时间和绘图上显示的数据?

    enter image description here

    from PyQt5.QtChart import *
    from PyQt5.QtGui import *
    from PyQt5.QtCore import *
    from PyQt5.QtWidgets import *
    from datetime import datetime as dt
    
    a = QApplication([])
    
    
    #https://doc.qt.io/qt-5/qtcharts-datetimeaxis-example.html
    
    x = ['2018-07-01 13:06:38', '2018-07-01 12:46:38', '2018-07-01 12:36:38', '2018-07-01 12:26:38', '2018-07-01 12:16:38', '2018-07-01 12:06:38', '2018-07-01 11:56:38', '2018-07-01 11:46:38', '2018-07-01 11:36:38', '2018-07-01 11:26:38', '2018-07-01 10:56:38', '2018-07-01 10:46:38', '2018-07-01 10:36:38'] 
    y = [23.5, 20.8, 28.0, 28.1, 28.0, 27.8, 27.3, 27.2, 25.7, 24.7, 25.0, 25.0, 24.9]
    
    #Chart Type
    series = QLineSeries()
    
    # Create Chart and set General Chart setting
    chart = QChart()
    chart.addSeries(series)
    chart.setTitle("Temperature records in celcius")
    chart.setAnimationOptions(QChart.SeriesAnimations)
    
    # X Axis Settings   
    axisX = QDateTimeAxis()
    axisX.setTickCount(10)
    axisX.setFormat("dd HH mm") #https://doc.qt.io/qt-5/qdatetime.html#toString-2
    axisX.setTitleText("Day")
    
    
    chart.addAxis(axisX, Qt.AlignBottom)
    series.attachAxis(axisX)
    
    # Y Axis Settings
    axisY = QValueAxis()
    axisY.setLabelFormat("%i")
    axisY.setTitleText("Temperature C")
    
    chart.addAxis(axisY, Qt.AlignLeft)
    series.attachAxis(axisY)
    
    # Create a QChartView object with QChart as a parameter. This way we don't need to create the QGraphicsView scene ourselves. We also set the Antialiasing on to have the rendered lines look nicer.
    
    chartView = QChartView(chart)
    chartView.setRenderHint(QPainter.Antialiasing)
    
    chart.createDefaultAxes()
    
    chart.axisY(series).setRange(min(y)-5, max(y)+5)    
    
    chart.legend().setVisible(True)
    chart.legend().setAlignment(Qt.AlignBottom)
    
    chartView = QChartView(chart)
    chartView.setRenderHint(QPainter.Antialiasing)   
    
    
    window = QMainWindow()
    window.setCentralWidget(chartView)
    window.resize(600, 300)   
    window.show()
    a.exec_()
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   eyllanesc    8 年前

    您至少有以下错误:

    • 您不必要地创建了2个QchartView。
    • 不要调用 CreateDefaultAxes() Since you delete the previous axles.

    您必须将字符串转换为 qdatetime 然后转换为whole with qdatetime.fromString(). and tomsecssinceepoch(). ,respectively.


    从pyqt5.qtcore导入* 从pyqt5.qtgui导入* 从pyqt5.qtwidgets导入* 从pyqt5.qtchart导入* #https://doc.qt.io/qt-5/qtcharts-datetimeaxis-example.html 如果“名称”= 导入系统 A=Q应用(系统参数) X=['2018-07-01 13:06:38'、'2018-07-01 12:46:38'、'2018-07-01 12:36:38'、'2018-07-01 12:26:38'、'2018-07-01 12:16:38'、'2018-07-01 12:06:38'、'2018-07-01 11:56:38'、'2018-07-01 11:46:38'、'2018-07-01 11:36:38'、'2018-07-01 11:26:38'、'2018-07-01 10:56:38'、'2018-07-01 10:46:38'、'2018-07-01 10:36:38'] Y=[23.5、20.8、28.0、28.1、28.0、27.8、27.3、27.2、25.7、24.7、25.0、25.0、24.9] #图表类型 系列=QlineSeries() 对于t,val in zip(x,y): series.append(qdatetime.fromString(t,“yyyy-mm-dd hh:mm:ss”).tomsecssinceepoch(),val) #创建图表并设置常规图表设置 图表=Qchart() Chart.AddSeries(系列) chart.settitle(摄氏温度记录) chart.setAnimation选项(qchart.series动画) #X轴设置 axisx=qdatetimeaxis()。 axisx.settickcount(10个) axisx.setformat(“dd hh-mm”)https://doc.qt.io/qt-5/qdatetime.html_toString-2 axisx.settitletext(“天”) Chart.Addaxis(轴x,qt.AlignBottom) 系列.attachaxis(axisx) #Y轴设置 axisy=qvalueaxis()。 axisy.setlabelformat(“%i”)。 axisy.settitletext(“温度C”) 图表.添加轴(轴,qt.左对齐) 系列.附件(轴) #使用Qchart作为参数创建QchartView对象。这样我们就不需要自己创建QgraphicsView场景。我们还将“反锯齿”设置为使渲染的线条看起来更好。 ChartView=QChartView(图表) chartview.setrenderInt(qpaint.antialising) 图表.axisy(系列).setrange(min(y)-5,max(y)+5) Chart.Legend().SetVisible(真) Chart.Legend().SetAlignment(qt.AlignBottom) 窗口=qmainwindow()) window.setcentralwidget(图表视图) 窗口。调整大小(1280480) window.show()。 系统退出(a.exec_u())

    因为删除了以前的轴。

    必须将字符串转换为QDateTime然后整体QDateTime.fromString()toMSecsSinceEpoch(),分别。


    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    from PyQt5.QtChart import *
    
    #https://doc.qt.io/qt-5/qtcharts-datetimeaxis-example.html
    
    if __name__ == '__main__':
        import sys
    
        a = QApplication(sys.argv)
    
        x = ['2018-07-01 13:06:38', '2018-07-01 12:46:38', '2018-07-01 12:36:38', '2018-07-01 12:26:38', '2018-07-01 12:16:38', '2018-07-01 12:06:38', '2018-07-01 11:56:38', '2018-07-01 11:46:38', '2018-07-01 11:36:38', '2018-07-01 11:26:38', '2018-07-01 10:56:38', '2018-07-01 10:46:38', '2018-07-01 10:36:38'] 
        y = [23.5, 20.8, 28.0, 28.1, 28.0, 27.8, 27.3, 27.2, 25.7, 24.7, 25.0, 25.0, 24.9]
    
        #Chart Type
        series = QLineSeries()
        for t, val in zip(x, y):
            series.append(QDateTime.fromString(t, "yyyy-MM-dd hh:mm:ss").toMSecsSinceEpoch(), val)
    
        # Create Chart and set General Chart setting
        chart = QChart()
        chart.addSeries(series)
        chart.setTitle("Temperature records in celcius")
        chart.setAnimationOptions(QChart.SeriesAnimations)
    
        # X Axis Settings   
        axisX = QDateTimeAxis()
        axisX.setTickCount(10)
        axisX.setFormat("dd HH mm") #https://doc.qt.io/qt-5/qdatetime.html#toString-2
        axisX.setTitleText("Day")
        chart.addAxis(axisX, Qt.AlignBottom)
        series.attachAxis(axisX)
    
        # Y Axis Settings
        axisY = QValueAxis()
        axisY.setLabelFormat("%i")
        axisY.setTitleText("Temperature C")
        chart.addAxis(axisY, Qt.AlignLeft)
        series.attachAxis(axisY)
    
        # Create a QChartView object with QChart as a parameter. This way we don't need to create the QGraphicsView scene ourselves. We also set the Antialiasing on to have the rendered lines look nicer.
        chartView = QChartView(chart)
        chartView.setRenderHint(QPainter.Antialiasing)
    
        chart.axisY(series).setRange(min(y)-5, max(y)+5)
        chart.legend().setVisible(True)
        chart.legend().setAlignment(Qt.AlignBottom)
        window = QMainWindow()
        window.setCentralWidget(chartView)
        window.resize(1280, 480)   
        window.show()
        sys.exit(a.exec_())
    

    enter image description here

    推荐文章