ダイオードI-V特性測定器作成:3-2. PC側ソフト設計 – Matplotlibでのグラフ表示

2025年8月31日

Google Ad

本記事の主旨

ダイオードI-V特性測定器(カーブトレーサ)作成のPC側ソフト上におけるMatplotlibでのグラフ表示について記す。

本記事の目的

本記事の目的を以下に記す。

  • Matplotlibでのグラフ表示のソースについての解説を記すこと

本記事の背景

ダイオードI-V特性測定器(カーブトレーサ)作成の中でPC側ソフトを作成したため、本記事でその部分的な解説をする。

本記事の位置づけ

以下の流れで作業説明と解説を行った。

記事に対応したリンクを添付した。

概要説明:ダイオードI-V特性測定器作成:0. 概要 | 工事中.com

  1. 取扱説明
  2. 回路設計
    1. ダイオードのI-V特性を手作業で確認
    2. 回路の実装
      1. 回路の実装(PWM平滑化)
      2. 回路の実装(PWM平滑化以外)
  3. PC側ソフト設計
    1. pySerialでUSBシリアル通信
    2. Matplotlibでのグラフ表示★現在のページ
    3. Pythonで最小二乗法の指数関数近似
    4. openpyxlでグラフ描画と最小二乗法の指数関数近似
  4. マイコン側ソフト設計
    1. Arduino Uno Rev3 / R4 Minima
    2. Raspberry Pi Pico / Pico 2
  5. 実験
    1. 1N4148の測定でマイコンとソースの組み合わせを比較
    2. 種々のダイオードを測定
    3. 種々の高精度ゲルマニウムダイオードを測定
  6. まとめと補足

コードの全体

今回解説するコードの全体は、以下にアップロードした。

image.py

Matplotlib用ソースファイル。

calc.py

計算用ソースファイル。

data.py

データクラス用ソースファイル。

コードの解説

以下のような画像を生成するのに必要なコードを解説する。

グラフ画像化

以下のImageクラス内で実装した。

グラフ上の点を作成

自作のCalcIVExpRegGraph.calc()関数で、観測値のx座標とy座標から最小二乗法で指数関数近似した指数関数グラフ上の点を取得する。

        reg_x, reg_y = CalcIVExpRegGraph.calc(x, y) # 指数関数近似のグラフを作成

グラフ画像作成開始

Matplotlibのmatplotlib.pyplot.figure()関数で、図を作成する。

Matplotlibのmatplotlib.figure.Figure.add_subplot()関数で、画像の中の何行何列の何番目に位置させたグラフを作成するオブジェクトを作成するか決める。

        fig = plt.figure()

        ax = fig.add_subplot(111)   # 1行1列の1番目に位置させる。

グラフ画像プロット

Matplotlibのmatplotlib.axes.Axes.scatter()関数で、観測値の散布図を描画する。

Matplotlibのmatplotlib.axes.Axes.plot()関数で、近似曲線グラフ上の点をプロットする。

Matplotlibのmatplotlib.axes.Axes.plot()関数は折れ線グラフを描く関数だが、近似曲線グラフ上の点を多く用意して折れ線グラフを書けば滑らかなグラフに見える。

近似曲線グラフ上の点を多く用意する方法は、後述する近似曲線のグラフ上の点を作成で解説する。

        ax.scatter(x, y)        # 観測値の散布図のプロット
        ax.plot(reg_x, reg_y)   # 指数関数近似曲線のプロット

グラフ上の文字列設定

Matplotlibのmatplotlib.axes.Axes.set_title()関数で、グラフのタイトルを設定する。

Matplotlibのmatplotlib.axes.Axes.set_xlabel()関数で、x軸のラベルを設定する。

Matplotlibのmatplotlib.axes.Axes.set_ylabel()関数で、y軸のラベルを設定する。

ここでは商用利用や改変可で自由なライセンスの、Githubでも公開されているオープンフォントのBIZ UD明朝を指定した。

        ax.set_title("可変・固定抵抗を用いて測定した1N4148のI-V特性", fontname="BIZ UDMincho")
        ax.set_xlabel("電圧[V]", fontname="BIZ UDMincho")
        ax.set_ylabel("電流[mA]", fontname="BIZ UDMincho")

グラフ画像保存

Matplotlibのmatplotlib.pyplot.savefig()関数で、任意のファイル名でグラフ画像を保存する。

        plt.savefig("ivfigure.png")

近似曲線のグラフ上の点を作成

以下のCalcIVExpRegGraphクラス内で実装した。

指数関数近似曲線の導出

自作のCalcIVExpRegFunc.calc()関数内で、求めた指数関数近似曲線の情報が入ったIVExpRegGraphDataオブジェクトを生成している。

以下がIVExpRegGraphDataクラスである。

        reg = CalcIVExpRegFunc.calc(tmp_x, tmp_y)   # 指数関数近似曲線の算出

近似曲線グラフ上の点のリスト化

Numpyのnumpy.linspace()関数を使って、指数関数近似曲線の定義域を1000分割したx座標のリストを作成する。

そのx座標を指数関数近似曲線に代入して、指数関数近似曲線上の点を1000個リスト化する。

        reg_x = np.linspace(tmp_x[0], tmp_x[-1], 1000)  # プロットしたいグラフは、観測値の最小値から最大値まで近似曲線を1000分割した点により行う。
        reg_y = [reg.num_coef * math.exp(reg.num_th_power * num) for num in reg_x]  # reg_xの値を全部近似曲線に入力し、reg_yを求める。

前回(3-1. PC側ソフト設計 - pySerialでUSBシリアル通信)

次回(3-3. PC側ソフト設計 - Pythonで最小二乗法の指数関数近似)

他の回

「ダイオードI-V特性測定器作成 連載記事」でタグ付けを行っている。

広告

Matplotlibを主にデータ処理に使うのに、参考になるかもしれない本。

広告