Matplotlibで棒グラフに統計的に有意な差を示す方法
データ分析や論文作成において、棒グラフに誤差バー(エラーバー)を追加して統計的な有意差を視覚的に示すことは非常に重要です。Pythonの可視化ライブラリ「Matplotlib」を使えば、bar()メソッドとerrorbar()メソッドを組み合わせることで、平均値と標準偏差を含む棒グラフを簡単に作成できます。
実装の手順
棒グラフに統計的な有意差(誤差バー)を示すには、以下の手順に従います。
- figureサイズの設定:
rcParamsで図のサイズを指定し、サブプロット間の余白(パディング)を調整します。 - データポイントの準備:平均値(means)、標準偏差(std)、インデックス(index)、バーの幅(width)、ラベル(labels)を作成します。
- 図とサブプロットの生成:
subplots()メソッドを使用して、figureとサブプロットのセットを作成します。 - 棒グラフの描画:
bar()メソッドで棒グラフを作成します。 - 誤差バーの追加:
errorbar()メソッドでY値に対するXの線やマーカーを、誤差バー付きでプロットします。 - 軸の調整:Y軸の表示範囲を設定し、X軸の目盛りの位置とラベルを指定します。
- 図の表示:
show()メソッドでグラフを画面に表示します。
サンプルコード
import numpy as np
import matplotlib.pyplot as plt
# 図のサイズとレイアウトを設定
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
# データの準備
means = (5, 15, 30, 40) # 平均値
std = (2, 3, 4, 5) # 標準偏差
index = np.arange(4) # X軸の位置
width = 0.7 # バーの幅
labels = ('A', 'B', 'C', 'D') # ラベル
# 図とサブプロットを作成
fig, ax = plt.subplots()
# 棒グラフを描画
ax.p1 = plt.bar(index, means, width=width, color="red",
linewidth=2, zorder=5, alpha=0.5)
# 誤差バーを追加
ax.errs = plt.errorbar(index, means, yerr=std)
# Y軸の上限を設定し、X軸にラベルを付ける
plt.ylim(ymax=60)
plt.xticks(index, labels, color='k')
plt.show()
コードの解説
このコードでは、4つのグループ(A〜D)の平均値を赤色の半透明な棒グラフで表現しています。alpha=0.5によりバーが半透明になり、誤差バーが見やすくなります。また、zorder=5を指定することで、バーがグリッド線より前面に描画されます。
errorbar()メソッドのyerr引数に標準偏差を渡すことで、各バーの上部に縦の誤差バーが自動的に追加され、データのばらつき(統計的な有意差)が一目でわかるようになります。
出力結果

このように、Matplotlibを活用すれば、平均値とその変動範囲を同時に表現した、科学的・統計的な文脈に適した棒グラフを短いコードで作成できます。
-
Matplotlibのplt.show()とcv2.imshow()の違いとは?画像表示の差をわかりやすく解説
Pythonで画像を扱う際、MatplotlibとOpenCV(cv2)はどちらも画像を多次元のNumPy配列として読み込みます。しかし、両者には重要な違いがあります。Matplotlibのimreadメソッドは画像を赤(R)・緑(G)・青(B)の順(RGB順)のNumPy配列として読み込み、imshowで画面に表示します。一方、OpenCVのcv2.imreadも同様に多次元NumPy配列として画像を読み込みますが、チャンネルの並びが逆順(BGR順)になっている点が最大の特徴です。この違いを理解せずに使うと、cv2で読み込んだ画像をMatplotlibで表示した際に色が反転して見えるという現
-
Matplotlibでハッチの線幅を変更する方法
Matplotlibでハッチ(網掛け)の線幅を変更したい場合は、rcParamsの「hatch.linewidth」パラメータを設定することで実現できます。この記事では、具体的な手順とサンプルコードをわかりやすく解説します。実装の手順図のサイズを設定し、サブプロット間および周囲のパディングを調整します。NumPyを使用して、x および y = sin(x) のデータポイントを作成します。plt.rcParams[hatch.linewidth] を使って、ハッチの線幅を設定します。scatter() メソッドを使用し、「/」ハッチが付いた正方形マーカーで、設定した線幅を適用しながらxとyのデー