[PyQt] QtChart를 통해 여러 축의 차트 표시

입문


지금까지 Python의 차트 표시 및 제작 사용pyqtgraph.하지만 최근 3년 정도 업데이트가 되지 않아 어차피 Qt가 지원하는 것으로 갈아타고 싶어서 사용해 보았다QtChart.

환경

  • Windows 10
  • Python 3.7.3
  • PyQt5 5.13.1
  • PyQtChart 5.13.1
  • 설치

    $ pip install PyQt5 $ pip install PyQtChart

    생성된 예



    X축은 시간, Y축은 전류, 전압으로 제작되었다.
    소스는 다음과 같습니다.
    qchart_example.py
    import random
    import sys
    
    from PyQt5.QtChart import (QChart,
                               QChartView,
                               QLineSeries,
                               QValueAxis,
                               QDateTimeAxis)
    from PyQt5.QtCore import (QDateTime,
                              Qt)
    from PyQt5.QtGui import QPainter
    from PyQt5.QtWidgets import QApplication
    
    
    app = QApplication(sys.argv)
    
    cur_series = QLineSeries()
    vol_series = QLineSeries()
    now = QDateTime.currentDateTime()
    
    # 適当なデータを作成
    for i in range(100):
        cur = 5 * random.random()
        vol = 20 * random.random()
        time = now.addSecs(i).toMSecsSinceEpoch()  # QLineSeriesにappendするための処理
        cur_series.append(time, cur)
        vol_series.append(time, vol)
    
    chart = QChart()
    chart.legend().hide()
    chart.addSeries(cur_series)
    chart.addSeries(vol_series)
    
    # X軸を作成
    time_axis_x = QDateTimeAxis()
    time_axis_x.setFormat("hh:mm:ss")
    chart.addAxis(time_axis_x, Qt.AlignBottom)
    cur_series.attachAxis(time_axis_x)
    vol_series.attachAxis(time_axis_x)
    
    # Y1軸を作成
    cur_axis_y = QValueAxis()
    cur_axis_y.setTitleText("Current[A]")
    cur_axis_y.setLinePenColor(cur_series.pen().color())  # 軸とチャートの色を同じにする
    cur_axis_y.setRange(0, 5)
    chart.addAxis(cur_axis_y, Qt.AlignLeft)
    cur_series.attachAxis(cur_axis_y)
    
    # Y2軸を作成
    vol_axis_y = QValueAxis()
    vol_axis_y.setTitleText("Voltage[V]")
    vol_axis_y.setLinePenColor(vol_series.pen().color())  # 軸とチャートの色を同じにする
    vol_axis_y.setRange(0, 20)
    chart.addAxis(vol_axis_y, Qt.AlignRight)
    vol_series.attachAxis(vol_axis_y)
    
    cur_vol_chart_view = QChartView()
    cur_vol_chart_view.setChart(chart)
    cur_vol_chart_view.setRenderHint(QPainter.Antialiasing)  # チャートを滑らかに表示するため
    cur_vol_chart_view.show()
    
    sys.exit(app.exec_())
    
    

    참조 URL

  • https://doc.qt.io/qt-5/qxyseries.html#at
  • https://doc.qt.io/qt-5/qvalueaxis.html#setRange
  • https://doc.qt.io/qt-5/qlineseries.html
  • https://doc.qt.io/qt-5/qtcharts-datetimeaxis-example.html
  • https://doc.qt.io/qt-5/qdatetime.html#currentDateTime
  • https://doc.qt.io/qt-5/qdatetimeaxis.html#tickCount-prop
  • https://doc.qt.io/qt-5/qtcharts-multiaxis-example.html
  • 좋은 웹페이지 즐겨찾기