本記事では、Pythonのデータ可視化ライブラリであるmatplotlibのstemに焦点を当てて解説します。stemは、離散データのプロットに特化した便利な機能であり、特に信号処理や数学の分野でよく使用されます。まずは基本的な使い方から始めて、その後、カスタマイズや応用例についても解説します。
matplotlibとは
プログラミング言語Pythonおよびその科学計算用ライブラリNumPyのためのグラフ描画ライブラリである。オブジェクト指向のAPIを提供しており、様々な種類のグラフを描画する能力を持つ。描画できるのは主に2次元のプロットだが、3次元プロットの機能も追加されてきている。描画したグラフを各種形式の画像(各種ベクトル画像形式も含む)として保存することもできる(Wiki参照)
matplotlib – Wikipedia
基本のプロット
まずは、stem関数の基本的な使い方を見てみましょう。以下のコードは、与えられたデータポイントを使って離散データのプロットを行うシンプルな例です。
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [1, 8, 3, 6, 5]
plt.stem(x, y)
plt.show()
このコードでは、xとyに与えられたデータポイントを使って、stem関数を用いて離散データのプロットを行っています。stem関数は、与えられたxとyの値を棒グラフとしてプロットします。
折れ線グラフや棒グラフでプロットしたい場合はこちらを参考にしてください。
xとyの同じインデックスつまり(1,1)、(2,8)、(3,3)、(4,6)、(5,5)にプロットされています。
問題なくプロットされてます。では、前回同様に見た目をカスタマイズしていきます。
見た目のカスタマイズ
さまざまなカスタマイズが可能です。例えば、マーカーやラインのスタイル、色などを指定することができます。
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [1, 8, 3, 6, 5]
plt.stem(x, y, linefmt='--', markerfmt='o', basefmt=' ', use_line_collection=True)
plt.legend() #凡例
plt.show()
Tips:主要なカスタマイズキーワード
グラフ作成時に使用できる引数オプションが非常に多くあります。が必要最低限テーブルにまとめた分をおさえて記載します。
kywd | 入力例 | 備考 |
---|---|---|
x,y | [1,2,3,4,5] または 事前に定義したlistなど | array形式のもの ※必須 |
orientation | orientation=’vertical’ | ステムの方向 verticalは垂直方向 horizontalは水平方向 |
line関連 | ||
linefmt | linefmt=”blue” | 垂直線の色や線種 -は実線 –は破線 -.は一点鎖線 :は点線 |
bottom | bottom=0 | ベースラインの位置 |
marker関連 | ||
markerfmt | markerfmt=”s” | マーカーの形 指定しないと○ *は星形など様々指定可 |
label | label=”label1″ | 凡例名 |
色見本
color example code: named_colors.py — Matplotlib 2.0.2 documentation
マーカー見本
lines_bars_and_markers example code: marker_reference.py — Matplotlib 2.0.2 documentation
信号処理
stem関数は、信号処理の分野でよく使用されます。例えば、離散時間システムのインパルス応答や周波数応答を可視化する際に活用されます。以下はその一例です。
import numpy as np import matplotlib.pyplot as plt # インパルス応答の生成 t = np.linspace(0, 1, 100) h = np.exp(-5*t) * np.sin(10*np.pi*t) # インパルス応答のプロット plt.stem(t, h, linefmt='--', markerfmt='.', basefmt='C3-', use_line_collection=True) plt.xlabel('Time') plt.ylabel('Amplitude') plt.title('Impulse Response') plt.grid(True) plt.show()
このコードでは、指数的に減衰するインパルス応答を生成し、stem関数を使ってプロットしています。これにより、インパルス応答の特性を視覚的に把握することができます。
まとめ
本記事では、matplotlibのstem関数について解説しました。stem関数を使うことで、離散データを直感的に可視化することができます。また、カスタマイズや信号処理の応用例についても紹介しました。これを参考にして、データの可視化や信号処理に役立ててください。
コメント