Python
 Computer >> コンピューター >  >> プログラミング >> Python

Matplotlibでマスクされた値とNaN値をプロットする3つの方法

データには欠損値(NaN)が含まれることが多く、Matplotlibでそれらをどう扱うかは可視化の品質に直結します。この記事では、条件を満たすデータ点に対して「①ポイントを削除する」「②マスク配列で隠す」「③NaNに置き換える」という3つのアプローチを用いて、マスクされた値とNaN値をプロットする方法を具体的なコード例とともに解説します。

実装の手順

  • 図のサイズを設定し、サブプロット間および周囲のパディングを調整します。
  • numpyを使ってxyのデータポイントを作成します。
  • y > 0.7となる点を除外したx2y2を用意します(ポイント削除方式)。
  • y > 0.7となる点をマスクしたy3を用意します(マスク配列方式)。
  • y > 0.7となる位置をNaNに置き換えたy4を用意します(NaN置換方式)。
  • plot()メソッドでxyy2y3y4をそれぞれプロットします。
  • 凡例を配置し、プロットにタイトルを設定します。
  • 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()

出力結果

Matplotlibでマスクされた値とNaN値をプロットする3つの方法

このコードを実行すると、同じデータに対する4種類の描画結果が1つの図に並んで表示されます。マスクやNaNを適用した系列では、y > 0.7の範囲で線が途切れていることが確認できます。データの性質や目的に応じて最適な手法を選ぶことで、欠損値を含むグラフをより正確かつ見やすく表現できるでしょう。

  1. MatplotlibでNaN値を含むデータをプロット・操作する方法を解説

    MatplotlibでNaN値をプロット・操作する手順 Matplotlibでは、NaN(欠損値)を含むデータもそのまま可視化できます。基本的な流れは以下の3ステップです。 NumPyを使って、NaN値をいくつか含むデータ(配列)を作成します。 imshow()メソッドを使用し、カラーマップとステップ1で作成したデータを指定して、2次元の正規ラスタ上に画像として表示します。デフォルトでは、NaNの部分は自動的に空白(マスクされた領域)として描画されます。 作成した図を画面に表示するには、show()メソッドを呼び出します。 コード例 import numpy as np from matp

  2. Matplotlibで折れ線グラフをアニメーション化する方法を徹底解説

    Matplotlibでは、FuncAnimationを活用することで、折れ線グラフに動きのあるアニメーション効果を簡単に加えることができます。本記事では、基本的な手順と実際に動作するサンプルコードを交えながら、その方法をわかりやすく解説します。折れ線グラフをアニメーション化する基本手順subplots()メソッドを使用して、図(figure)とサブプロットを作成します。x軸・y軸それぞれの表示範囲(スケール)を設定します。NumPyを使って、xおよびtのデータ点を生成します。座標ベクトルからmeshgrid()で座標行列X2とT2を作成します。plot()メソッドでxとFのデータを使い、折れ線