PythonのMatplotlibで位相スペクトルをプロットする方法を解説
PythonのMatplotlibでは、phase_spectrum()メソッドを使うことで、信号の位相スペクトルを簡単に可視化できます。位相スペクトルとは、信号に含まれる各周波数成分の位相角を表したもので、フーリエ解析による信号処理の分野でよく利用されます。
この記事では、正弦波にノイズを加えたサンプル信号を作成し、その位相スペクトルをプロットする具体的な手順を紹介します。
位相スペクトルをプロットする手順
- 図のサイズを設定し、サブプロット間および周囲のパディング(余白)を調整します。
- 再現性を確保するため、乱数のシード値を固定します。
- サンプリング間隔 dt を初期化し、そこからサンプリング周波数を算出します。
- 時間軸 t のデータ点を作成します。
- numpyを使って nse(ホワイトノイズ)、r(減衰係数)、cnse(畳み込み後のノイズ)、s(合成信号)を生成します。
subplots()メソッドで図とサブプロットを作成します。- プロットのタイトルを設定します。
phase_spectrum()メソッドで位相スペクトルを描画します。show()メソッドで図を表示します。
サンプルコード
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
np.random.seed(0)
dt = 0.01 # サンプリング間隔
Fs = 1 / dt # サンプリング周波数
t = np.arange(0, 10, dt)
# ノイズを生成:
nse = np.random.randn(len(t))
r = np.exp(-t / 0.05)
cnse = np.convolve(nse, r) * dt
cnse = cnse[:len(t)]
s = 0.1 * np.sin(4 * np.pi * t) + cnse
fig, axs = plt.subplots()
axs.set_title("Phase Spectrum")
axs.phase_spectrum(s, Fs=Fs, color='C2')
plt.show()
実行結果
上記のコードを実行すると、4πラジアンの正弦波に減衰ノイズが重畳された信号の位相スペクトルが表示されます。グラフには、各周波数における位相角の分布が緑色('C2')の線で描画されます。

ポイント解説
phase_spectrum()メソッドは、引数 Fs にサンプリング周波数を指定することで、横軸を適切な周波数スケールで表示してくれます。また、color引数で線の色を指定できるほか、振幅スペクトルを描画したい場合は magnitude_spectrum() を使うこともできます。
-
Python Matplotlibで単一のポイント(点)をプロットする方法
Matplotlibを使えば、たった1つのデータポイントでも簡単にグラフ上へプロットできます。ここでは、単一の点をプロットするための基本的な手順を解説します。 単一ポイントをプロットする手順 x と y のリストを、単一の値で初期化します。 plt.xlim() および plt.ylim() を使って、X軸・Y軸の表示範囲を0〜5に設定します。 plt.grid() を呼び出して、現在の線スタイルでグリッドを描画します。 plot() メソッドでxとyをプロットし、marker=o、markeredgecolor=red、markerfacecolor=green を指定してマーカーの見た目
-
Matplotlibを使ってPythonで3D密度マップを描画する方法を徹底解説
MatplotlibとNumPyを組み合わせると、Pythonで簡単に3D密度マップ(濃度分布図)を作成できます。本記事では、pcolormesh()メソッドを使って擬似カラープロットとして密度マップを可視化する具体的な手順を、サンプルコード付きでわかりやすく解説します。 3D密度マップを描画する基本の手順 NumPyでデータを生成する:side、x、y、zの各データをNumPyで作成します。特にlinspace関数を使うと、指定した2点間の範囲を任意の分割数で等間隔にデータ生成できるため便利です。 座標行列を作成する:sideデータをもとにmeshgrid()を使い、座標ベクトルから2次元