2021-07-23

Qt for Python によるチャート (5)

Python で GUI アプリを作成するときに Qt の Python 用バインディングである PySide (Qt for Python) を使用することが多くなりました。散布図などのチャート作成には、もっぱら matplotlib を使っていますが、他の選択肢も検討しようと、QtCharts というチャート作成用ライブラリの使い方をまとめました。

当初、PySide 用の QtCharts のサンプルが見つからず、C++ 用のサンプル [1] を PySide 用に書き直していましたが、よく探してみると PySide 用サンプルもありました [2]。ここでは、勉強がてら C++ 用のサンプルを書き直したものを紹介していきます。

本記事では、下記の OS 環境を使用しています。

Fedora 34 Workstation x86_64
- Python 3.9.6
- PySide6 6.1.2 (venv)
- IDE: PyCharm 2021.1.3 (Community Edition)

LogLineChart(対数折れ線グラフ)

LogLineChart(対数折れ線グラフ)は、縦軸を対数軸にした折れ線グラフです。

qtcharts_loglinechart.py
#!/usr/bin/env python
# coding: utf-8
# Reference
# https://doc.qt.io/qt-6/qtcharts-logvalueaxis-example.html
import sys
from PySide6.QtCharts import (
QChart,
QChartView,
QLineSeries,
QLogValueAxis,
QValueAxis,
)
from PySide6.QtCore import (
QPointF,
Qt
)
from PySide6.QtGui import QPainter
from PySide6.QtWidgets import (
QApplication,
QMainWindow,
)
class LogLineChart(QChartView):
def __init__(self):
super().__init__()
chart = self.init_ui()
self.setChart(chart)
self.setRenderHint(QPainter.Antialiasing)
def init_ui(self):
series = QLineSeries()
series.setPointsVisible(True)
series << QPointF(1.0, 1.0) << QPointF(2.0, 73.0) << QPointF(3.0, 268.0) \
<< QPointF(4.0, 17.0) << QPointF(5.0, 4325.0) << QPointF(6.0, 723.0)
chart = QChart()
chart.addSeries(series)
chart.legend().hide()
chart.setTitle('Logarithmic axis example')
axisX = QValueAxis()
axisX.setTitleText('Data point')
axisX.setLabelFormat('%i')
axisX.setTickCount(series.count())
chart.addAxis(axisX, Qt.AlignBottom)
series.attachAxis(axisX)
axisY = QLogValueAxis()
axisY.setTitleText('Values (Log10)')
axisY.setLabelFormat('%.0E')
axisY.setBase(10.0)
axisY.setMinorTickCount(-1)
chart.addAxis(axisY, Qt.AlignLeft)
series.attachAxis(axisY)
return chart
class Example(QMainWindow):
def __init__(self):
super().__init__()
linechart = LogLineChart()
self.setCentralWidget(linechart)
self.resize(500, 300)
self.setWindowTitle('LogLineChart')
def main():
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec())
if __name__ == '__main__':
main()

実行例を下記に示しました。

qtcharts_loglinechart.py の実行例

縦軸に QLogValueAxis() のインスタンスを使って対数スケールにしています。対数関数の底は 10 としました。

        axisY = QLogValueAxis()
        axisY.setTitleText('Values (Log10)')
        axisY.setLabelFormat('%.0E')
        axisY.setBase(10.0)
        axisY.setMinorTickCount(-1)
        chart.addAxis(axisY, Qt.AlignLeft)
        series.attachAxis(axisY)

参考サイト

  1. Qt Charts Examples | Qt Charts 6.1.2
  2. Qt for Python Examples — Qt for Python

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ Linuxへ
にほんブログ村

0 件のコメント: