実験結果をまとめるときなど多くの場合で,エラーバー付きのグラフとしたいことがあります。
今回は,グラフ作成後も軸の拡大縮小が可能なplotlyについて,エラーバーの設定を行いたいと思います。
今回の記事では,以下の2つのことができることを目指します。
エラーバーの色,線の太さの設定
目標とするグラフは↓です。
スマホなどでは,上図は画像です。plotlyによる操作感を試したい方はPCからアクセスください。
*このグラフのコードは,最後のまとめにあります。一括でコピペしたい場合は,そちらを参考にしてください。
ライブラリ,ワインデータの読み込み
ライブラリには,sklearn, pandas, plotly.graph_objectsを読み込んでいますが,実際にグラフ作成に必要なのはplotly.graph_objectsです。
データには,scikit-learnのワインのデータセットを使いました。
公式サイトの解説はこちらです。
#ライブラリのインポート
from sklearn import datasets
import pandas as pd
import plotly.graph_objects as go
#ワインデータの読み込み
data = datasets.load_wine()
X=data['data']
Y=data['target']
wine_X = pd.DataFrame(X, columns=data['feature_names'])
df_wine = wine_X.copy()
df_wine['target']=Y
df_wine
df_wineは下記の画像のようになっています。
df_wineの列は,14種類の要素から成っており,ここから”alcohol”のデータを使います。
データの作成
まず,“alcohol“からランダムに数値を5点抜き取ります。
抜き取った5点の平均値をプロットし,そのばらつき(不偏標準偏差)をエラーバーとしようと思います。
5点の抜き取り作業を6回繰り返し,その結果でグラフを作ります。
今回,ランダムに5点,計6回抜き取った結果は↓のようになります。
数値の右側の”13.74”が“alcohol“の値です。
この結果を得るためのコードはこちら↓になります。
このコードを実行すると,先ほどのランダムに5点,計6回抜き取った結果を表示してくれます。
x_list=[]
mean_list=[]
std_list=[]
for i in range(6):
print('--',i+1,'回目--')
random_list=df_wine['alcohol'].sample(n=5, random_state=i)
print(random_list)
x_list.append(i+1)
mean_list.append(random_list.mean())
std_list.append(random_list.std())
x_list,mean_list,std_listのリストには
- x_list:抜き出した回数
- mean_list:平均値
- std_list:不偏標準偏差
を入れます。
「alcohol」からランダムに5点抜き取るため,
df_wine[‘alcohol’].sample(n=5, random_state=i)
を使っています(6行目)。
参考までに,x_list,mean_list,std_listの中身は以下のようになっています。
print(x_list)
#↓x_listの中身
#[1, 2, 3, 4, 5, 6]
print(mean_list)
#↓mean_listの中身
#[13.102, 13.146, 13.315999999999999, 13.185999999999998, 13.558000000000002, 13.733999999999998]
print(std_list)
#↓std_listの中身
# [0.5596159397300979, 0.7636294913110674, 0.3609432088293115, 0.8882736064974578, 0.7352006528832793, 0.46933996207440065]
グラフの作成
上述で作成したx_list,mean_listを使い,まずは散布図を作成します。
このグラフとコードを基に,次の章からエラーバーを追加を行いたいと思います。
グラフを作成したコードは↓になります。
fig = go.Figure()
fig.add_trace(go.Scatter(x=x_list,
y= mean_list,
marker=dict(color='blue', size=6),
line=dict(color='blue', width=0.5,dash='solid')
))
# 軸ラベル, 背景
fig.update_layout(plot_bgcolor="white")
fig.update_xaxes(title=dict(text='sample size'),
linecolor='black', mirror=True, gridcolor='gray', griddash='dot')
fig.update_yaxes(title=dict(text='alcohol'), range=(6,16),
linecolor='black', mirror=True, gridcolor='gray', griddash='dot')
fig.show()
散布図の書き方については以下の記事でまとめていますので、参考にしてください。
エラーバー付きのグラフの表示
それでは本題です。先ほどの散布図にエラーバーを追加します。
plotly公式HPも併せてご確認ください。
エラーバーを表示することで,実験などのデータのばらつき加減を可視化することができます。
今回のエラーバーのデータは最初に作成したstd_listです。
先ほどのコードに6〜11行目を追記しています。
fig = go.Figure()
fig.add_trace(go.Scatter(x=x_list,
y= mean_list,
marker=dict(color='blue', size=6),
line=dict(color='blue', width=0.5,dash='solid'),
error_y=dict(type='data',
array=std_list,
color='black',
thickness=1,
visible=True,
width=3)
))
# 軸ラベル, 背景
fig.update_layout(plot_bgcolor="white")
fig.update_xaxes(title=dict(text='sample size'),
linecolor='black', mirror=True, gridcolor='gray', griddash='dot')
fig.update_yaxes(title=dict(text='alcohol'), range=(6,16),
linecolor='black', mirror=True, gridcolor='gray', griddash='dot')
fig.show()
fig.add_trace(go.Scatter())内のerror_yにてエラーバーの設定を行います。
今回は実施しませんが,error_yをerror_xとすればx軸方向のエラーバーを表示できます。
error_yの中身は下表を参考にしてください。
fig.add_trace(go.Scatter(…,
error_y=dict(type= <VALUE>,
array= <VALUE>,
color= <VALUE>,
thickness= <VALUE>,
visible= <VALUE>,
width= <VALUE>,
))
error_y=dict(…) | type= ○○○ | ‘data’,‘percent’,‘constant’などから選択。 ‘data’では下記の‘array’のデータがエラーバーとなる |
array= ○○○ | エラーバーのデータ | |
color= ○○○ | エラーバーの色 | |
thickness= ○○○ | エラーバーの線の太さ | |
visible= ○○○ | ‘True’でエラーバーを表示する | |
width= ○○○ | エラーバーのキャップの幅 |
以上で,エラーバーの表示を行うことができます。
エラーバーの色,太さ
ここからは,前述のコードを一部変更してエラーバーの色や太さを変更したグラフを見ていきたいと思います。
色の変更
エラーバーの色を変更します。
エラーバーの設定にてcolor=’black’としていたところを,color=’blue’とし青色とすると↓のようになります。
線の太さの変更
width=3をwidth=8と変更すると,エラーバーのキャップ部の線を強調することができます。
逆に,width=0とすればキャップ部をなくし線としてエラーバーを表現することができます。
ご自身の使用場面に応じて,上記の設定をご活用ください。
いろいろなグラフへの設定
さらにここからは,いろいろなエラーバーの表示設定を確認したいと思います。
x方向y方向へのエラー表示設定
まず,x方向とy方向の両方のエラーバーを表示してみます。
データは乱数で新たに作成し直しました。
上記のグラフのコードは↓になります。
import random
import plotly.graph_objects as go
random.seed(314)
X_list=[i for i in range(0, 20,2)]
Y_list=[random.randrange(2, 20, 2) for i in range(10)]
std_listY=[random.uniform(1,3) for i in range(10)]
std_listX=[random.uniform(0,2) for i in range(10)]
fig = go.Figure()
fig.add_trace(go.Scatter(x=X_list,
y= Y_list,
marker=dict(color='blue', size=6),
line=dict(color='blue', width=0.5,dash='solid'),
error_y=dict(type='data',
array=std_listY,
color='black',
thickness=1,
visible=True,
width=3),
error_x=dict(type='data',
array=std_listX,
color='black',
thickness=1,
visible=True,
width=3)
))
# 軸ラベル, 背景
fig.update_layout(plot_bgcolor="white")
fig.update_xaxes(title=dict(text='X-data'),
linecolor='black', mirror=True, gridcolor='gray', griddash='dot')
fig.update_yaxes(title=dict(text='Y-data'),
linecolor='black', mirror=True, gridcolor='gray', griddash='dot')
fig.show()
x方向のエラーバーの設定は17-22行目,y方向のエラーバーの設定は23-28行目です。
また,x,yのデータは6,7行目で設定し,エラーバーのデータは9,10行目で設定しています。
yのデータは,2以上20以下の範囲でかつ,2刻みのステップの数値の中でランダムに値を10個の取得し,リストとして作成しています。
設定している項目は以下を参考にしてください。
std_listX = [random.randrange(a,b,c) for i in range(d)]
random.uniform(a, b, c) | a以上b以下でc刻みの中から乱数をつくる |
[random.uniform(a, b, c) for i in range(d)] | a以上b以下でc刻みの中からd個の乱数を持つリストを作成 |
エラーバーのデータの設定する項目は以下の通りです。
std_listX = [random.uniform(a,b) for i in range(c)]
random.uniform(a, b) | a以上b以下の浮動小数点の乱数をつくる |
[random.iniform(a, b) for i in range(c)] | a以上b以下の浮動小数点を乱数をc個持つリストを作成 |
棒グラフのエラーバーの設定
次は,棒グラフへのエラーバーの表示設定を行います。
上記のグラフのコードは↓になります。
random.seed(1)
Y_list=[random.randrange(2, 20, 2) for i in range(10)]
std_list=[random.uniform(1,3) for i in range(10)]
fig = go.Figure()
fig.add_trace(go.Bar(y= Y_list,
textposition='auto',
width=0.4,
marker=dict(color='blue'),
error_y=dict(type='data',
array=std_list,
color='black',
thickness=1.5,
visible=True,
width=3),
))
# 軸ラベル, 背景
fig.update_layout(plot_bgcolor="white")
fig.update_xaxes(linecolor='black', mirror=True, gridcolor='gray', griddash='dot')
fig.update_yaxes(title=dict(text='Y-data'),
linecolor='black', mirror=True, gridcolor='gray', griddash='dot')
fig.show()
棒グラフへの設定については,以下の記事をご確認ください。
まとめ
エラーバーの設定の方法をみてきました。
エラーバーを表示するためには,fig.add_trace(go.Scatter())内にerror_yやerror_xを設定します。
error_yの設定項目としては以下の通りです。
fig.add_trace(go.Scatter(…,
error_y=dict(type= <VALUE>,
array= <VALUE>,
color= <VALUE>,
thickness= <VALUE>,
visible= <VALUE>,
width= <VALUE>,
))
error_y=dict(…) | type= ○○○ | ‘data’,‘percent’,‘constant’などから選択。 ‘data’では下記の‘array’のデータがエラーバーとなる |
array= ○○○ | エラーバーのデータ | |
color= ○○○ | エラーバーの色 | |
thickness= ○○○ | エラーバーの線の太さ | |
visible= ○○○ | ‘True’でエラーバーを表示する | |
width= ○○○ | エラーバーのキャップの幅 |
冒頭のグラフのコードはこちら
#ライブラリのインポート
from sklearn import datasets
import pandas as pd
import plotly.graph_objects as go
#ワインデータの読み込み
data = datasets.load_wine()
X=data['data']
Y=data['target']
wine_X = pd.DataFrame(X, columns=data['feature_names'])
df_wine = wine_X.copy()
df_wine['target']=Y
df_wine
x_list=[]
mean_list=[]
std_list=[]
for i in range(6):
# print('--',i+1,'回目--')
random_list=df_wine['alcohol'].sample(n=5, random_state=i)
print(random_list)
x_list.append(i+1)
mean_list.append(random_list.mean())
std_list.append(random_list.std())
#print(mean_list)
#print(std_list)
fig = go.Figure()
fig.add_trace(go.Scatter(x=x_list,
y= mean_list,
marker=dict(color='blue', size=6),
line=dict(color='blue', width=0.5,dash='solid'),
error_y=dict(type='data',
array=std_list,
color='black',
thickness=1,
visible=True,
width=3)
))
# 軸ラベル, 背景
fig.update_layout(plot_bgcolor="white")
fig.update_xaxes(title=dict(text='sample size'),
linecolor='black', mirror=True, gridcolor='gray', griddash='dot')
fig.update_yaxes(title=dict(text='alcohol'), range=(6,16),
linecolor='black', mirror=True, gridcolor='gray', griddash='dot')
fig.show()
実験データなど値のばらつきがある場合については,エラーバーの表記は必須となります。
本記事によって,plotlyによるエラーバー付きのグラフが作成できるようになれば幸いです!
以上,【plotly】実例多数!エラーバーの設定 -error_x/error_y- でした!
コメント