Matplotlibで曲線の条件に応じたシェーディング領域を作成する方法
Matplotlibでは、BrokenBarHCollection.span_where()を使うことで、曲線の値が特定の条件を満たす区間だけを自動的に塗りつぶすことができます。この記事では、正弦波の正の部分を緑色、負の部分を赤色で塗り分ける具体例を通して、その実装手順を解説します。
実装の手順
図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。
NumPyを使って t、s1、s2 のデータポイントを生成します。
図とサブプロットのセットを作成します。
t と s1 のデータをプロットし、軸全体に渡る水平線を追加します。
yrange(y方向の範囲)にまたがる水平バーのコレクションを、xranges(x方向の範囲のシーケンス)に基づいて作成します。
作成した Collection オブジェクトを軸(axes)に追加します。
plt.show()メソッドで図を表示します。
コード例
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.collections as collections
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
t = np.arange(0.0, 2, 0.01)
s1 = np.sin(2 * np.pi * t)
s2 = 1.2 * np.sin(4 * np.pi * t)
fig, ax = plt.subplots()
ax.plot(t, s1, color='black')
ax.axhline(0, color='black', lw=2)
collection = collections.BrokenBarHCollection.span_where(t, ymin=0, ymax=1,
where=s1 > 0, facecolor='green', alpha=0.5
)
ax.add_collection(collection)
collection = collections.BrokenBarHCollection.span_where(t, ymin=-1, ymax=0,
where=s1 < 0, facecolor='red', alpha=0.5
)
ax.add_collection(collection)
plt.show()コードのポイント
span_where()のwhere引数にブール配列(例:s1 > 0)を渡すことで、条件がTrueとなる区間のみが塗りつぶされます。yminとymaxで塗りつぶす縦方向の範囲を指定します。上記の例では、正の領域は0〜1を緑で、負の領域は-1〜0を赤で描画しています。alpha=0.5を指定することで半透明になり、元の曲線が見えやすくなります。
出力結果
このコードを実行すると、次のような出力が得られます。正弦波が0より大きい区間は緑色、0より小さい区間は赤色で塗り分けられて表示されます。

-
Matplotlibのpyplot.plot()を使ってパラメトリック曲線を描画する方法
Pythonの可視化ライブラリMatplotlibでは、pyplot.plot()メソッドを利用することで、パラメータ方程式で定義された曲線(パラメトリック曲線)を簡単に描画できます。この記事では、極座標形式のパラメトリック曲線を2次元平面上にプロットする手順を、サンプルコードとともに解説します。パラメトリック曲線を描画する手順図のサイズと余白の設定: plt.rcParamsを使用して、図のサイズやサブプロット間・周囲のパディングを調整します。サンプル数Nの初期化: 曲線を構成するデータ点の数を表す変数Nを定義します。値が大きいほど滑らかな曲線になります。NumPyによるデータ点の生成: パ
-
Matplotlibで各サブプロットの軸テキストを回転表示する方法
Matplotlibでは、text()メソッドにrotation引数を指定することで、各サブプロット内のテキスト(軸ラベルや注釈など)を自由に回転させて表示できます。本記事では、図の作成からテキストの回転、注釈の追加までの一連の手順を、実際のコード例とともにわかりやすく解説します。実装手順新しい図(figure)を作成するか、既存の図をアクティブにします。add_subplot()メソッドを使って、サブプロット配置の一部として図にAxesオブジェクトを追加します。subplots_adjust()メソッドで、サブプロットのレイアウトパラメータを調整します。suptitle()メソッドで、図全体