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

Matplotlibで各データポイントに間隔(±標準偏差)を付けて線グラフを描画する方法

Matplotlibで各データポイントに間隔を付けて線をプロットする方法

データを可視化する際、平均値を示す折れ線だけでなく、各データポイントにおけるばらつき(標準偏差などの間隔)を一緒に表示すると、より情報量の多いグラフになります。Matplotlibでは plot() メソッドと fill_between() メソッドを組み合わせることで、このようなグラフを簡単に作成できます。

以下の手順で、平均値の折れ線に各データポイントの間隔を帯として重ねて描画してみましょう。

実装手順

  • 図のサイズを設定し、サブプロット間および周囲のパディングを調整します。
  • 平均値(means)と標準偏差(stds)のNumPy配列を作成します。
  • plot() メソッドを使用して平均値を折れ線でプロットします。
  • fill_between() メソッドで「平均値+標準偏差」と「平均値-標準偏差」の間の領域を塗りつぶします(alpha=0.7、color='yellow' を指定して半透明の黄色にします)。
  • show() メソッドで図を画面に表示します。

コード例

import numpy as np
import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

means = np.array([3, 5, 1, 8, 4, 6])
stds = np.array([1.3, 2.6, 0.78, 3.01, 2.32, 2.9])

plt.plot(means, color='red', lw=7)

plt.fill_between(range(6), means - stds, means + stds, alpha=.7, color='yellow')

plt.show()

コードのポイント

fill_between() の第1引数にはX軸の座標(ここでは range(6))、第2・第3引数には塗りつぶす領域の下限と上限(それぞれ means - stdsmeans + stds)を渡します。引数 alpha=.7 を指定することで帯が半透明になり、背後の要素との視認性が向上します。また、lw=7 により平均値の折れ線を太く描画し、帯との対比をはっきりさせています。

出力結果

上記のコードを実行すると、赤い太い折れ線で平均値の推移が描画され、その上下には各データポイントの標準偏差に応じた幅を持つ黄色い半透明の帯が表示されます。これにより、データの中心傾向とばらつきの大きさをひと目で把握できるグラフになります。

Matplotlibで各データポイントに間隔(±標準偏差)を付けて線グラフを描画する方法Matplotlibで各データポイントに間隔(±標準偏差)を付けて線グラフを描画する方法

  1. 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 を指定してマーカーの見た目

  2. Python Matplotlibでカスタムカラーとカスタム領域サイズを使って4D散布図をプロットする方法

    はじめに散布図(Scatter Plot)は、2つの変数間に関係性があるかどうかを確認するために、2次元データを視覚化する際に非常に便利なグラフです。散布図では、データがX値とY値を持つ点(ドット)として表現されます。実装手順1. matplotlibのインストールまず、以下のコマンドでmatplotlibをインストールします。pip install matplotlib2. matplotlibのインポートimport matplotlib.pyplot as plttennis_stats = ((Federer, 20),(Nadal, 20),(Djokovic, 17),(Sampr