Matplotlibでマスクされた値とNaN値をプロットする3つの方法
データには欠損値(NaN)が含まれることが多く、Matplotlibでそれらをどう扱うかは可視化の品質に直結します。この記事では、条件を満たすデータ点に対して「①ポイントを削除する」「②マスク配列で隠す」「③NaNに置き換える」という3つのアプローチを用いて、マスクされた値とNaN値をプロットする方法を具体的なコード例とともに解説します。
実装の手順
- 図のサイズを設定し、サブプロット間および周囲のパディングを調整します。
- numpyを使ってxとyのデータポイントを作成します。
- y > 0.7となる点を除外したx2・y2を用意します(ポイント削除方式)。
- y > 0.7となる点をマスクしたy3を用意します(マスク配列方式)。
- y > 0.7となる位置をNaNに置き換えたy4を用意します(NaN置換方式)。
- plot()メソッドでx・y・y2・y3・y4をそれぞれプロットします。
- 凡例を配置し、プロットにタイトルを設定します。
- show()メソッドで図を表示します。
3つの手法の違い
- ポイント削除:条件に合う点をデータから完全に取り除きます。シンプルですが、x座標の間隔が変わり、元のデータ構造との対応が崩れます。
- マスク配列:
np.ma.masked_where()で該当箇所を隠します。x座標はそのまま維持され、マスクされた部分だけが描画されません。 - NaN置換:値を
np.nanに置き換えると、Matplotlibが自動的にその点をスキップして線を途切れさせてくれます。最もシンプルでよく使われる方法です。
サンプルコード
import matplotlib.pyplot as plt
import numpy as np
plt.rcParams['figure.figsize'] = [7.50, 3.50]
plt.rcParams['figure.autolayout'] = True
x = np.linspace(-np.pi/2, np.pi/2, 31)
y = np.cos(x)**3
# 1) y > 0.7 のポイントを削除
x2 = x[y <= 0.7]
y2 = y[y <= 0.7]
# 2) y > 0.7 のポイントをマスク
y3 = np.ma.masked_where(y > 0.7, y)
# 3) y > 0.7 の位置を NaN に置換
y4 = y.copy()
y4[y3 > 0.7] = np.nan
plt.plot(x*0.1, y, 'o-', color='lightgrey', label='No mask')
plt.plot(x*0.4, y2, 'o-', label='Points removed')
plt.plot(x*0.7, y3, 'o-', label='Masked values')
plt.plot(x*1.0, y4, 'o-', label='NaN values')
plt.legend()
plt.title('Masked and NaN data')
plt.show()
出力結果

このコードを実行すると、同じデータに対する4種類の描画結果が1つの図に並んで表示されます。マスクやNaNを適用した系列では、y > 0.7の範囲で線が途切れていることが確認できます。データの性質や目的に応じて最適な手法を選ぶことで、欠損値を含むグラフをより正確かつ見やすく表現できるでしょう。
-
MatplotlibでNaN値を含むデータをプロット・操作する方法を解説
MatplotlibでNaN値をプロット・操作する手順 Matplotlibでは、NaN(欠損値)を含むデータもそのまま可視化できます。基本的な流れは以下の3ステップです。 NumPyを使って、NaN値をいくつか含むデータ(配列)を作成します。 imshow()メソッドを使用し、カラーマップとステップ1で作成したデータを指定して、2次元の正規ラスタ上に画像として表示します。デフォルトでは、NaNの部分は自動的に空白(マスクされた領域)として描画されます。 作成した図を画面に表示するには、show()メソッドを呼び出します。 コード例 import numpy as np from matp
-
Matplotlibで折れ線グラフをアニメーション化する方法を徹底解説
Matplotlibでは、FuncAnimationを活用することで、折れ線グラフに動きのあるアニメーション効果を簡単に加えることができます。本記事では、基本的な手順と実際に動作するサンプルコードを交えながら、その方法をわかりやすく解説します。折れ線グラフをアニメーション化する基本手順subplots()メソッドを使用して、図(figure)とサブプロットを作成します。x軸・y軸それぞれの表示範囲(スケール)を設定します。NumPyを使って、xおよびtのデータ点を生成します。座標ベクトルからmeshgrid()で座標行列X2とT2を作成します。plot()メソッドでxとFのデータを使い、折れ線