ラベル QtCharts の投稿を表示しています。 すべての投稿を表示
ラベル QtCharts の投稿を表示しています。 すべての投稿を表示

2024-06-13

動的に QChart を利用する ~ PySide6

PySide (Qt for Python) は、Qt(キュート)の Python バインディングで、GUI などを構築するためのクロスプラットフォームなライブラリです。Linux/X11, macOS および Microsoft Windows をサポートしています。配布ライセンスは LGPL で公開されています。

本ブログで、Matplotlib のチャートを PySide6 の GUI に埋め込んで、QTimer でイベントを発生させて動的にチャートに正弦曲線を描画するサンプルを示しました [1]

このぐらいのチャートであれば、PySide6 の QChart でも実現できるだろうと考え、同じようなサンプルを作ってみました。

下記の OS 環境で動作確認をしています。

RHEL 9.4 x86_64
Python 3.12.1
PySide6 6.7.1

今回もタイマーで 50 ミリ秒毎にイベントを発生させて正弦曲線 (Sin) を描画していますが、時刻の扱いが不慣れだったので、単純に 0.02π 刻みでプロットして、10π になったらタイマーを止めています。またチャートの y 軸のレンジは固定し、x 軸はある程度の頻度で更新するようにしました、

qtcharts_linechart_realtime.py

このサンプルを実行した例を示しました。

qtcharts_linechart_realtime.py の実行例

Matplotlib でチャートを描画する作法とは異なるものの、QLineSeries にデータ点を追加するだけでチャートを更新でき、必要があればデータ全体を簡単に取り出せます。PySide6 だけで完結させたければ、これでもよいのかもしれません。個人的には、圧倒的に Matplotlib を利用する頻度が高いので、QChart によるプロットは慣れが必要です。

参考サイト

  1. bitWalk's: 動的に Matplotlib のチャートを利用する ~ PySide6 [2024-06-10]
  2. QChart - Qt for Python
  3. QChartView - Qt for Python
  4. QLineSeries - Qt for Python
  5. QValueAxis - Qt for Python

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

2023-08-12

QRubberBand を使いこなしたい 〜 PySide6 〜

PySide (Qt for Python) は、Qt(キュート)の Python バインディングで、GUI などを構築するためのクロスプラットフォームなライブラリです。配布ライセンスは LGPL で公開されています(商用ライセンスも有り)。最新のバージョンは Qt6 に対応した PySide6(記事執筆時点で 6.5.2)です。

ちゃちゃっとプロットする GUI アプリを PySide6 で作りたい場合、使い慣れている Matplotlib を利用することができます。しかし、PySide6 でも QtCharts モジュールを利用すれば一通りのチャートを扱えるので、簡単なチャートであれば Qt だけでアプリケーションを完結させたいと考えてしまいます。

ただ、Matplotlib でできて PySide6 でできないことがいくつかあります。いや、できないこと、と言うよりも、やり方を知らない、と表現するべきですね。

今回は、そんな「やり方を知らなかった」ことの一つ、チャート上でマウスをドラックして(矩形)領域を指定し、そのデータを選択できるようにすることができるようになりましたので、サンプルを紹介します。

下記の OS 環境で動作確認をしました。

Fedora Linux 38 (Workstation Edition) x86_64
python3.11 python3-3.11.4-1.fc38.x86_64
PySide6 6.5.2

チャートのズームに利用していた QRubberBand を [3]、今回は矩形領域の選択に利用しています。rubber band とは輪ゴムのことですが、マニュアルを読んでもピンとこなかったので、ウィジェットとして使いこなせていませんでした。今回いろいろ調べたので、少しは使えるようになりました。👍

機能を紹介するサンプルとしては、冗長になっていて判りにくいかもしれません。

qtcharts_scatterchart_rubberband.py

今回やりたかったことは、マウスのクリックやドラッグの操作で、チャート上で矩形領域を指定することです。

実行例 (1) : マウスでドラッグして矩形領域を指定

現実的な用途としては、矩形領域を選択したあとに、下記のように色を変えるなどの視覚化をしたりします。この例では赤色の点を重ね書きしているだけです。

実行例 (2) : Select ボタンをクリックして選択を確定

今回紹介したサンプルコードは、はっきり言って長すぎます。もっとすっきりと簡潔なサンプルになるように gist のサンプルを改良していきます。

参考サイト

  1. PySide6.QtCharts - Qt for Python
  2. QRubberBand - Qt for Python
  3. bitWalk's: Qt for Python によるチャート (7) [2021-07-25]

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

2023-03-06

QChart で散布図を作成 〜 PySide6 〜

PySide (Qt for Python) は、Qt(キュート)の Python バインディングで、GUI などを構築するためのクロスプラットフォームなライブラリです。配布ライセンスは LGPL で公開されています(商用ライセンスも有り)。最新のバージョンは Qt6 に対応した PySide6(記事執筆時点で 6.4.2)です。

QChart を使うと、PySide6 だけで色々チャートを作成することができるのですが、普段はチャートの作成に Matplotlib 系のライブラリを使うことが多いので、QChart の使い方を忘れてしまいます。複数のデータ群を QChart を利用して散布図にプロットしようとしたのですが、思うようにできずに苦戦してしまったので、この機会に整理しました。

下記の OS 環境で動作確認をしました。

Fedora Linux 37 (Server Edition) x86_64
python3.11 python3-3.11.2-1.fc37.x86_64
PySide6 6.4.2

ここで紹介するサンプルは、乱数を使って単純にデータ点をプロットするだけのものです。時間軸にしたいときもあるので、敢えて QValueAxis クラスを使ってサンプルを作成しています。

qtcharts_scatterchart_1.py
qtcharts_scatterchart_1.py の実行例

参考サイト

  1. QChart - Qt for Python
  2. QValueAxis - Qt for Python
  3. QScatterSeries - Qt for Python

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

2021-08-01

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

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.2 (Community Edition)

DonutChart(ドーナツチャート)

ドーナツチャートは円グラフの変形で、中心部にドーナツのように穴を入れます。

このサンプルではシンプルな例を紹介していますが、ドーナツ状にすることで、同心円にいくつものドーナツチャートを径を変えて重ね合わすことができます。

qtcharts_donutchart.py

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

qtcharts_donutchart.py の実行例

QPieSeries クラスのインスタンスに、setHoleSize() メソッドでドーナツの穴のサイズ (0.0 - 1.0) を指定します。

        series = QPieSeries()
        series.setHoleSize(0.35)

参考サイト

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

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ Linuxへ
にほんブログ村
このエントリーをはてなブックマークに追加

2021-07-31

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

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.2 (Community Edition)

PieChart(円グラフ)

円グラフは、円全体を 100% として、その中に占める項目の構成比を扇形で表したグラフです。

qtcharts_piechart.py

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

qtcharts_piechart.py の実行例

QPieSeries クラスのインスタンスに、データラベルとデーター量を対にして追加します。

        series = QPieSeries()
        series.append('Jane', 25)
        series.append('Joe', 16)
        series.append('Andy', 9)
        series.append('Barbara', 4)
        series.append('Axel', 1)

特定のデータを際立たしたい場合には、定義したデータを格納した slices のリストから(0 からの)順番を指定して QPieSlice クラスのインスタンスを取り出し、装飾します。

        slice1 = series.slices()[1]
        slice1.setExploded()
        slice1.setLabelVisible()
        slice1.setPen(QPen(Qt.darkGreen, 2))
        slice1.setBrush(Qt.green)

参考サイト

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

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ Linuxへ
にほんブログ村
このエントリーをはてなブックマークに追加

2021-07-30

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

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.2 (Community Edition)

BoxWhiskerChart(箱ひげ図)

箱ひげ図(はこひげず、英:box-and-whisker plot)は、データのばらつきをわかりやすく表現するための統計図です。主に多くの水準からなる分布を視覚的に要約し、比較するために用います。箱(box)と、その両側に出たひげ(whisker)で表現されることからこの名があります。

Wikipedia より引用、編集
qtcharts_boxwhiskerchart.py

本サンプルでは、下記の二つのテキストファイルをプロットするデータとして読み込んでいます。

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

qtcharts_boxwhiskerchart.py の実行例

ファイルを読み込んで、データ列 series への追加は、下記のスタティックメソッドで処理しています。

def box_data_reader(name_file: str, name_series: str) -> QBoxPlotSeries:
    series = QBoxPlotSeries()
    series.setName(name_series)

    with open(name_file) as f:
        for line in f:
            values = line.strip().split()
            if len(values) == 0:
                continue
            if values[0] == '#':
                continue

            boxset = QBoxSet(values[0])
            for i in range(1, len(values)):
                boxset.append(float(values[i]))

            series.append(boxset)

    return series

データ列には QBoxPlotSeries クラス、ボックスプロット用のデータセット作成には QBoxSet クラスのインスタンスを使います。

参考サイト

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

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ Linuxへ
にほんブログ村
このエントリーをはてなブックマークに追加

2021-07-29

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

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)

PercentBarChart(パーセント棒グラフ)

BarChart(棒グラフ)は、縦軸(あるいは横軸)にデータ量をとり、棒の高さ(長さ)でデータの大小を表現したグラフです。以前紹介した棒グラフのサンプル [3] では、横軸のカテゴリに対して、異なるデータ列 (series) を並べて異なる色の棒であらわし、前回 [4] は、それをひとつの棒に積み上げました。

今回は積み上げてカテゴリ毎に一本の棒であらわし、かつ全体を 100% として全体に対するデータの比率をあらわしたパーセント棒グラフのサンプル (PercentBarChart) を紹介します。

qtcharts_percentbarchart.py

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

qtcharts_percentbarchart.py の実行例

パーセント棒グラフを作成する場合は、QBarSeries クラスの代わりに QPercentBarSeries クラスのインスタンスをデータ列の定義に使用します。

        series = QPercentBarSeries()
        series.append(set0)
        series.append(set1)
        ...
        ...

参考サイト

  1. Qt Charts Examples | Qt Charts 6.1.2
  2. Qt for Python Examples — Qt for Python
  3. bitWalk's: Qt for Python によるチャート (3) [2021-07-21]
  4. bitWalk's: Qt for Python によるチャート (10) [2021-07-28]

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ Linuxへ
にほんブログ村
このエントリーをはてなブックマークに追加