Matplotlib

Pythonでエラーバー(誤差棒)付きのグラフを作ってみた

Pythonでエラーバー(誤差棒)付きのグラフを作ってみた

 

Pythonを使ってエラーバー(誤差棒)つきのグラフを作成するにはどうすれば良いの?初心者でもわかるように教えて…

本記事では、その悩みを解決してきます。

本記事の内容

  1. エラーバー(誤差棒)とは
  2. Pythonでエラーバー(誤差棒)つきのグラフを作成
  3. Pythonで3種類のエラーバーつきグラフを作成

本記事を読むメリット

  1. 初心者の方でもエラーバーつきグラフが作成できるようになる
  2. エラーバーについて知ることができる
  3. エラーバーの違いを視覚的に見ることができる

 

 

エラーバー(誤差棒)とは

 

本章では、エラーバー(誤差棒)の意味を簡単に説明していきます。

Wikipediaでは、以下のようにエラーバーを説明しています。

エラーバーは測定がどれほど正確か、逆にいえば、真の値が報告された値かたどれほど離れているかの概念を与える。エラーバーはしばしば、不確かさの標準偏差標準誤差、あるいは任意の信頼区間(例えば95%信頼区間)を表わす。これらの量は同じではないため、グラフあるいは説明文にはエラーバーが何を表わしているかを明確に記さなければならない。

引用 : Wikipedia

 

だいたいこの説明で理解できると思いますがもう少し掘り下げていきます。

エラーバー(誤差棒)とは

 

エラーバーとはWikipediaの説明にあるように、データのばらつき具合を表しています。

しかし、抽象的にばらつき具合と言っても、『ばらつき』の概念は一意に決まらないとめエラーバーが示す『ばらつき』を明示的に示す必要があります。

具体的にばらつきの指標としては以下のようなものがあります。

ばらつきの指標  
データの区間 一般には使用しない(データの範囲が知りたいときに使用)
標準偏差(SD) 母集団のばらつき具合を知りたいとき
標準誤差(SE) 平均値(期待値)の精度が知りたいとき
信頼区間 母集団のパラーメータを一定確率で含む範囲

 

このように、ばらつきを表す指標というのは複数存在するため、エラーバー(誤差棒)を使用するときは、どの指標を使用しているのかを明示する必要があります。

信頼区間を使用する場合は、何%なのかを示す必要もあります。

 

Pythonでエラーバー(誤差棒)つきのグラフを作成

 

本章では、Pythonのmatplotlibというライブラリを利用して、エラーバー(誤差棒)つきのグラフを作成していきます。

この章の目標は、とりあえずエラーバーがついているグラフを作成することです!

matplotlibの使い方に慣れていない方は下記を参考にしてください。

【15分】Pythonでグラフを作成する方法|matplotlibの基本をマスターPythonでグラフを書くことが難しそうだと思っていませんか?実は、Pythonを使用したグラフ作成は、excelより便利で簡単です。この記事では、初心者でもグラフが書けるように丁寧にpythonのグラフの作成法を説明します。...

 

必要なライブラリをインストール

 

まずは、必要なライブラリをインストールしていきます。

下記のコードを実行してください。

 

<Input>

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

 

Pandasをインポートする必要は本来ありませんが、綺麗に表を作成するために今回はインポートしました。

*使い方を知らなくても本記事を読み進めることは可能です。

Pandasの基本的な使い方に関しては下記を参考にしてください。

 

pandas入門(データ分析に必要不可欠なものをまとめてみた)『pandasを使ってみたいけど何から手をつけて良いかわからない...』という方のために本記事を作成しました。本記事では、Pandasを利用したデータ解析に必要不可欠なものだけをまとめました。...

 

サンプルデータの作成

 

今回使用するサンプルデータを作成していきます。

まずは、観測者が未知の真の値を作成していきます。

<Input>

# 真の値(観測者は未知)
x = np.array([0, 1, 2, 3, 4, 5])
y = x

 

これらを図示すると以下のようになります。

<Input>

fig, ax = plt.subplots()
ax.plot(x, y, marker='o')
ax.set_xlabel('x')
ax.set_ylabel('y_pop')
plt.show()

 

<Output>

真の値

y_popを真の値(母平均)とし、xを観測した位置だと思ってください。

実際の観測では、測定誤差等が生じてしまうため、直接真の値を知ることはできません。

今回は、仮想的に観測を再現するために、各位置で10回の観測を行い、各観測点は正規分布によるノイズを含むという設定を考えます。

具体的には下記のコードで仮想的な観測を行うことができます。

<Input>

y_obs = np.zeros((10, 6))
for i in range(10):
    y_obs[i, 0] = x[0] + np.random.rand()
    y_obs[i, 1] = x[1] + np.random.rand()
    y_obs[i, 2] = x[2] + np.random.rand()
    y_obs[i, 3] = x[3] + np.random.rand()
    y_obs[i, 4] = x[4] + np.random.rand()
    y_obs[i, 5] = x[5] + np.random.rand()

# 観測値と位置の関係を表にする
data = pd.DataFrame(y_obs, index=[f'観測値{i}' for i in range(1, 11)])
data

 

<Output>

観測値を生成

これで、サンプルデータの作成は完成です。

 

errorbarメソッドを使ってグラフを作ってみよう

 

エラーバー(誤差棒)ありのグラフを作成するためには、matplotlibの『errorbar』メソッドを使用します。

具体的な引数を最初に紹介します。

errorbarメソッド  
x x軸の値
y y軸の値
xerr x軸の各値に対する誤差
yerr y軸の各値に対する誤差
ecolor エラーバーの色
capsize エラーバーの横線の長さ
fmt 各点のマーカー
color マーカーの色

 

具体的に図示することで理解できると思うので、今回は、誤差の値を以下のように適当に決め、とりあえず誤差棒ありのグラフを描画します。

<Input>

# 誤差の値
xerr = np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6])
yerr = np.array([0.6, 0.5, 0.4, 0.3, 0.2, 0.1])

 

errorbarメソッドを使用してみましょう。

<Input>

fig, ax = plt.subplots()
ax.errorbar(x, y, xerr=xerr, yerr=yerr, capsize=4, fmt='o', ecolor='red', color='black')
ax.set_xlabel('x')
ax.set_ylabel('y')
plt.show()

 

<Output>

エラーバーありのグラフ

このように簡単にエラーバー(誤差棒)つきのグラフを作成することができます。

 

Pythonで3種類のエラーバーつきグラフを作成

 

ここからは、実際に範囲・標準偏差・標準誤差をエラーバーとするグラフを描画していきましょう。

これまで使用していたサンプルを使用し、以下の順番で説明していきます。

  1. 範囲をエラーバーとしたグラフ
  2. 標準偏差をエラーバーとしたグラフ
  3. 標準誤差をエラーバーとしたグラフ

 

では、詳しく説明していきます。

 

範囲をエラーバーとしたグラフ

 

まずは、範囲をエラーバーとしたグラフを書いていきます。

PandasのDataFrameを使用したおかげで、統計量を簡単に計算することができます。

下記のコードで各位置に対する観測値の範囲を計算することできます。

<Input>

# データの範囲
data.max() - data.min()

 

<output>

0    0.878707
1    0.963135
2    0.829554
3    0.836744
4    0.775076
5    0.702056
dtype: float64

 

この値を使ってエラーバーつきのグラフを作成していきます。

<Input>

# 各点を平均値とする
y_mean = np.array(data.mean())

fig, ax = plt.subplots()
ax.errorbar(x, y, yerr=yerr_scope, capsize=4, fmt='o', ecolor='red', color='black')
ax.set_xlabel('x')
ax.set_ylabel('y_obs')
ax.set_title('error bar : scope')
plt.show()

 

<Output>

範囲のエラーバー

 

 

標準偏差をエラーバーとしたグラフ

 

次に標準偏差をエラーバーとしたグラフを作成していきます。

まずは、各位置の標準偏差を求めます。

<Input>

# 標準偏差
data.std()

 

<Output>

0    0.292589
1    0.399725
2    0.299716
3    0.307299
4    0.283979
5    0.238467
dtype: float64

 

この値を使ってエラーバーつきのグラフを作成します。

<Input>

# 各点を平均値とする
y_mean = np.array(data.mean())

fig, ax = plt.subplots()
ax.errorbar(x, y, yerr=yerr_sd, capsize=4, fmt='o', ecolor='red', color='black')
ax.set_xlabel('x')
ax.set_ylabel('y_obs')
ax.set_title('error bar : SD')
plt.show()

 

<Output>

標準偏差をエラーバーとしたグラフ

 

標準誤差をエラーバーとしたグラフ

 

最後に標準誤差をエラーバーとしたグラフを描画していきます。

同様に、標準誤差を求めます。

 

<Input>

# 標準誤差
data.std() / np.sqrt(len(data))

 

<Output>

0    0.092525
1    0.126404
2    0.094778
3    0.097176
4    0.089802
5    0.075410
dtype: float64

 

標準誤差は以下のように求めることができるので、標準偏差を使用し求めました。

$$\text{SE} = \frac{\text{SD}}{\sqrt{N}}$$

ここで、Nは観測回数(観測サンプル数)を表します。

これらの値を使ってグラフを描画します。

<Input>

# 各点を平均値とする
y_mean = np.array(data.mean())

fig, ax = plt.subplots()
ax.errorbar(x, y, yerr=yerr_se, capsize=4, fmt='o', ecolor='red', color='black')
ax.set_xlabel('x')
ax.set_ylabel('y_obs')
ax.set_title('error bar : SE')
plt.show()

 

<Output>

エラーバーを標準誤差としたグラフ

 

参考URL

 

参考URLを紹介していきます。

 

参考URL

 

 

 

まとめ

 

本記事では、エラーバー(誤差棒)の簡単な説明と、Pythonを使ってエラーバーつきグラフを作成する方法を具体的な例を使って説明しました。

本記事で使用したライブラリを自由に使いこなすことで、エラーバーつきのグラフ以上に自由度の高い処理を行うことができます。

今日使用したライブラリについてさらに知りたい方は下記を参考にしてください

 

ABOUT ME
努力のガリレオ
【運営者】 : 東大で理論物理を研究中(経歴)東京大学, TOEIC950点, NASA留学, カナダ滞在経験有り, 最優秀塾講師賞, オンライン英会話講師試験合格, ブログと独自コンテンツで収益6桁達成 【編集者】: イングリッシュアドバイザーとして勤務中(経歴)中学校教諭一種免許取得[英語],カナダ留学経験あり, TOEIC650点
【必見】オンライン英会話を利用しないのは時代遅れ?

 

 

英語学習でオンライン英会話を利用しないのは、時代遅れです…

 

『スピーキングができないから、オンライン英会話はまだまだ後回し…』と思っている方は大間違いです。

 

最近のオンライン英会話は、教材が豊富で、もはや参考書・問題集は不要になりつつあります…

また、多くのオンライン英会話が最新メソッドを導入して、スピーキングのみならず、リーディング・リスニング・ライティングの能力も上がる教材を導入しています。

さらに、効率的な記憶ツールや学習カウンセリングのサービスが提供されることもあります!!

 

特に初心者の方は、下記の記事で紹介しているオンライン英会話をチェックしてみてください。

 

【東大生が厳選】初心者にオススメなオンライン英会話10選実は、最適なオンライン英会話はユーザーによって異なります。本記事では、複数のオンライン英会話を経験した私が、他社と比較しつつ特徴を明確にして本当にオススメできるオンライン英会話を10個厳選しました。...

 

中には、2週間の無料体験期間を提供しているオンライン英会話もあります。

英語学習が滞っている方や英語学習を習慣化できていない方は無料体験期間で良いので挑戦してみてください。

何事も行動することが大切です。

 

また、多くのオンライン英会話がTOEICやTOEFL等の外部英語試験の対策レッスンを提供してきています。

中には、追加料金なしで、本番さながらの対策や面接対策を行うことができるオンライン英会話もあります。

 

特にTOEIC対策に強いオンライン英会話は下記を参考にしてください。

 

【徹底比較】TOEIC対策に強いオンライン英会話5選|東大生が厳選!オンライン英会話はTOEICのスコアを効率的に上げる最強のツールです。本記事では、TOEICにオンライン英会話が効果的な理由とTOEIC対策に強いオンライン英会話を厳選しました。詳しい内容は記事を参考にしてください。...

 

TOEFL対策に強いオンライン英会話に関しては下記を参考にしてください。

 

【徹底比較】TOEFL対策に強いオンライン英会話5選|東大生が厳選!TOEFL対策にオンライン英会話は有効です。事実、私もTOEFL対策のためにオンライン英会話を使用してTOEFL ibtの4技能、TOEFL itpのスコアを爆上げすることができました。この記事では、私が思うTOEFL対策に最適なオンライン英会話を紹介しました。...