この記事は,plotlyを使った2次元ヒストグラムの作図方法について解説します。
読了後には,plotlyを使って悩むことなく2次元ヒストグラムの作図ができると思います!
2次元ヒストグラムの作図
2次元ヒストグラムのカラーなその設定
2次元ヒストグラムの頻度などの表示設定
正規化表現の設定
plotly.expressによる表現の設定
目標とするグラフは↓です。
ライブラリ,データの読み込み
まずは,使用するデータとライブラリの読み込みを行います。
作図するデータには,scikit-learnのワインのデータセット(公式サイト)を使いたいと思います。
2次元ヒストグラムの作図法を確認することが目的なので,必要に応じてデータは読み換えてみてください。
ライブラリには,sklearn, pandas, plotly.graph_objects を使用しています。
#ライブラリのインポート
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
plotlyで2次元ヒストグラムを作図するためには,plotly.graph_objectsがあればできます。
df_wineを読み込むと下画像のようになります。
ここから「alcohol」と「color_intensity」を使って作図したいと思います。
2次元ヒストグラムの作図
前章で読み込んだwineのデータを用いて,2次元ヒストグラムの作図を行います。
公式HPはこちらになります。あわせてご確認ください。
作成するグラフは下図のようになります。
*上記は画像です。
コードは↓です。
fig = go.Figure()
#2次元ヒストグラムの作図
fig.add_trace(go.Histogram2d(x=df_wine['alcohol'],
y=df_wine['color_intensity'],
colorbar=dict(title=dict(text='count'))
))
#軸の設定
fig.update_xaxes(title='alcohol')
fig.update_yaxes(title='color intensity')
fig.show()
主に,3-6行目で2次元ヒストグラムの作図を行なっています。
基本はこの3-6行目で,あとは必要に応じて追加していくイメージです。
詳細を以下にまとめたので,ご確認ください。
fig.add_trace(go.Histogram2d(x= <VALUE>,
y= <VALUE>,
colorbar=dict(title=dict(text= <VALUE>))
))
x= ○○○ | x軸のデータ |
y= ○○○ | y軸のデータ |
colorbar=dict(title=dict(text= ○○○)) | カラーバーのタイル名 |
カラー/gapの変更
次に,グラフのカラーとgapの調整方法をみます。
作成できるグラフのイメージ↓です。
*上記は画像です。
コードはこちら↓
fig = go.Figure()
#2次元ヒストグラムの作図
fig.add_trace(go.Histogram2d(x=df_wine['alcohol'],
y=df_wine['color_intensity'],
colorbar=dict(title=dict(text='count')),
colorscale="algae",
xgap=2,ygap=2,
))
#軸の設定
fig.update_xaxes(title='alcohol')
fig.update_yaxes(title='color intensity')
fig.show()
先ほどのコードに6,7行目が追記されています。
詳細は下記をご確認ください。
fig.add_trace(go.Histogram2d(…,
colorscale= <VALUE>,
xgap= <VALUE>, ygap= <VALUE>
))
colorscale= ○○○ | グラフのカラーの設定 “algae”, “twilight”などから選択。詳しくはこちら |
xgap= ○○○ | x方向のgap幅の設定 |
ygap= ○○○ | y方向のgap幅の設定 |
以下では,カラーやgapをそれぞれ変更したときにグラフの印象がどのように変わるかみていきます。
カラーの変更
まずは,gapは変更せずカラーを変更したときのグラフを確認します。
ここでは,colorscale=“twilight”/“turbo”をしたときのグラフ2つをみます。
いかがでしょうか?
色によってだいぶ印象が変わるかと思います。状況に応じて設定してみてください。
ギャップの変更
次は,colorscale=“algae”を固定して,xgap, ygapを変更します。
gapの値を大きくすることで,境界がはっきりします。
頻度の表示/bin数の設定
次に,頻度の表示およびbin数(階級,区間)の設定を行います。
頻度の表示によってその領域にあるデータ数を表示でき,またbin数によって分解能を変えることができます。
グラフは以下のようになります。
*上記は画像です。
コードは以下です。
fig = go.Figure()
#2次元ヒストグラムの作図
fig.add_trace(go.Histogram2d(x=df_wine['alcohol'],
y=df_wine['color_intensity'],
colorbar=dict(title=dict(text='count')),
colorscale="algae",
xgap=2,ygap=2,
texttemplate= "%{z}",
textfont=dict(color='blue', size=12),
xbins=dict(start=11,
end=15,
size=0.25),
ybins=dict(start=0,
end=14,
size=1.0),
))
#軸の設定
fig.update_xaxes(title='alcohol')
fig.update_yaxes(title='color intensity')
fig.show()
8-15行目を追記してます。
bin数の設定には2通りあります。
- xbinsによる設定 : ビン幅の指定
- nbinsxによる設定 : ビン数の指定
併用した場合は,nbinsxで指定したビン数を超えないよう,xbinsで指定したおおよそのビン幅になります。
以下では,頻度の表示設定とbin数の2通りの書き方についてまとめましたので,ご確認ください。
bin数はxbins/ybinsなど設定する中身は同じなのでxについてのみの記載です。
fig.add_trace(go.Histogram2d(…,
texttemplate= <VALUE>,
textfont=dict(color= <VALUE>, size= <VALUE>),
xbins= dict(start= <VALUE>,
end= <VALUE>,
size= <VALUE>),
nbinsx= <VALUE>,
))
texttemplate= ○○○ | グラフ上に表示される変数の設定: “%{変数}” ”%{z}”で頻度を表示できる | |
textfont= dict(…) | color= ○○○ | グラフ上に表示されるテキストの色 |
size= ○○○ | グラフ上に表示されるテキストのサイズ | |
xbins= dict(…) | start= ○○○ | ビンの開始位置の設定 |
end= ○○○ | ビンの終了位置の設定 | |
size= ○○○ | ビンのサイズの設定 | |
nbinsx= ○○○ | ビン数の設定 |
以下では,それぞれの設定を変化したときのグラフの変化を確認してみます。
nbinsx= ○○○についても見ますので,確認ください。
頻度の表示
まずは,頻度の表示についてです。
あえてtextfont= dict(…)を指定しなければ,↓のグラフのようにいい感じに配色などをしてくれます。
texttemplate=“%{z:.1f}”とすると小数点1桁まで表示できます。
ちなにみに“%{z:.2f}”なら小数点2桁まで表示できます。
この辺りを詳しく知りたい方は「変換指定子」などのキーワードで調べて頂くとより深く理解できるかと思います。
bin数
次に,bin数の設定をみてみます。
以下のようにxbins= dict(…), ybins= dict(…)の中身を変えることで,グラフに表示する分解能を変えることができます。
nbinsx= ○○○,nbinsy= ○○○では,おおよそのbin数を指定できます。
histfuncによる設定(正規化表現)
ここまでは,単純に“頻度“で2次元ヒストグラムを作図していました。(z軸が頻度)
次は,z軸を正規化する表現をみてみます。
正規化とは,一定のルールに従って数値を変換する方法です。
↓のグラフは,“percent”表現による正規化表現です。
*上記は画像です。
コードは↓です。
fig = go.Figure()
#2次元ヒストグラムの作図
fig.add_trace(go.Histogram2d(x=df_wine['alcohol'],
y=df_wine['color_intensity'],
colorbar=dict(title=dict(text='percent')),
colorscale="algae",
xgap=2,ygap=2,
texttemplate= "%{z:.2f}",
textfont=dict(color='blue', size=12),
xbins=dict(start=11,
end=15,
size=0.5),
ybins=dict(start=0,
end=14,
size=2.0),
histnorm="percent"
))
#軸の設定
fig.update_xaxes(title='alcohol')
fig.update_yaxes(title='color intensity')
fig.show()
16行目が追記され,正規化表現の設定しています。
設定項目の詳細については,以下をご確認ください。
fig.add_trace(go.Histogram2d(…,
histnorm= <VALUE>,
))
histnorm= ○○○ | 以下の5つから選択 “” : 度数表現(正規化しない) ”percent” : z軸全体の合計を100%にする正規化表現 “probability” : z軸全体の合計を1にする正規化表現 “density” : z軸を(度数)/(階級幅)の密度にする正規化表現 ”probability density” : “density”の面積全体を1にする正規化表現 |
正規化表現で選択できるhistnorm=‘’, ‘percent’, ‘probability’, ‘density’, ‘probability density’の5つのグラフについて,下記にまとめました。
違いなどを確認してみてください。
これだけだと‘probability’と ‘probability density’の違いが見えてこないですね。。。
plotly.expressによる表現
plotlyにはPlolty Express と Graph Objectsのモジュールがあります。
Graph Objectsの方が様々なグラフが作成できるので,ここまではGraph Objectsの使い方を見てきました。
しかし,Plolty Expressは少ないコードで簡単にグラフが作成できます。
しかも,2次元ヒストグラムの作図だけでなく,x軸とy軸のヒストグラムも併せて数行で作図できてしまいます。
これはPlolty Express の大きな魅力です。
前置きが長くなりましたが,グラフは↓になります。
*上記は画像です。
コードは↓です。非常に短くコードで済みます。
1行目でplotly.expressが必要なことはご注意ください。
import plotly.express as px
fig = px.density_heatmap(df_wine, x='alcohol', y='color_intensity',
marginal_x="histogram",
marginal_y="histogram",
text_auto=True)
fig.show()
Plolty Express で2次元ヒストグラムを作図する場合,px.density_heatmap(…)になります。
以下に,設定できる項目の一部をまとめますが,詳しくは公式HPをご確認ください。
(上記のコードで触れていない項目も載せてあります)
fig = px.density_heatmap(data_frame= <VALUE>,
x= <VALUE>,
y= <VALUE>,
marginal_x= <VALUE>,
marginal_y= <VALUE>,
text_auto= <VALUE>,
histnorm= <VALUE>,
histfunc= <VALUE>,
nbinsx= <VALUE>,
nbinsy= <VALUE>,
)
data_frame= ○○○ | ヒストグラムのデータ |
x= ○○○ | x軸データの判例名 |
y= ○○○ | y軸データの判例名 |
marginal_x= ○○○ | x軸方向のサブプロット表示 “rug”, “box”, “violin”, “histgram” から選択 |
marginal_y= ○○○ | x軸方向のサブプロット表示 “rug”, “box”, “violin”, “histgram” から選択 |
text_auto= ○○○ | 頻度などの表示設定、以下から選択 “True” : 表示する “False” : 表示しない(default) |
histnorm= ○○○ | 以下の5つから選択 “” : 度数表現(正規化しない) ”percent” : y軸全体の合計を100%にする正規化表現 “probability” : y軸全体の合計を1にする正規化表現 “density” : y軸を(度数)/(階級幅)の密度にする正規化表現 ”probability density” : “density”の面積全体を1にする正規化表現 |
histfunc= ○○○ | 以下の5つから選択,ただしz=○○○の値に適用 “count”: 度数,データ個数による表現 ”sum” : 合計値による表現 “avg” : 平均値による表現 “min” : 最小値による表現 ”max” : 最大値による表現 |
nbinsx= ○○○ | x軸のビン数の設定 |
nbinsy= ○○○ | y軸のビン数の設定 |
Graph Objectsのときの似たような項目が多いので,各項目でどのようにグラフが変わるかの説明は省力させて頂きます。
histfunc= ○○○については,下記で触れていますので参考にご確認ください。
まとめ
plotlyを使った2次元ヒストグラムの作図法をみてきました。
以下で,本記事で紹介した設定項目を一覧でまとめておきます。
bin数はxbins/ybinsなど設定する中身は同じなのでxについてのみの記載です。
fig.add_trace(go.Histogram2d(x= <VALUE>,
y= <VALUE>,
colorbar=dict(title=dict(text= <VALUE>)),
#カラー/gapの設定
colorscale= <VALUE>,
xgap= <VALUE>, ygap= <VALUE>
#頻度の表示/bin数の設定
texttemplate= <VALUE>,
textfont=dict(color= <VALUE>, size= <VALUE>),
xbins= dict(start= <VALUE>,
end= <VALUE>,
size= <VALUE>),
nbinsx= <VALUE>,
#頻度のの設定
histnorm= <VALUE>,
))
x= ○○○ | x軸のデータ | |
y= ○○○ | y軸のデータ | |
colorbar=dict(title=dict(text= ○○○)) | カラーバーのタイル名 | |
# カラー/gapの設定 | ||
colorscale= ○○○ | グラフのカラーの設定 “algae”, “twilight”などから選択。詳しくはこちら | |
xgap= ○○○ | x方向のgap幅の設定 | |
ygap= ○○○ | y方向のgap幅の設定 | |
# 頻度の表示/bin数の設定 | ||
texttemplate= ○○○ | グラフ上に表示される変数の設定: “%{変数}” ”%{z}”で頻度を表示できる | |
textfont= dict(…) | color= ○○○ | グラフ上に表示されるテキストの色 |
size= ○○○ | グラフ上に表示されるテキストのサイズ | |
xbins= dict(…) | start= ○○○ | ビンの開始位置の設定 |
end= ○○○ | ビンの終了位置の設定 | |
size= ○○○ | ビンのサイズの設定 | |
nbinsx= ○○○ | ビン数の設定 | |
# 正規化表示の設定 | ||
histnorm= ○○○ | 以下の5つから選択 “” : 度数表現(正規化しない) ”percent” : z軸全体の合計を100%にする正規化表現 “probability” : z軸全体の合計を1にする正規化表現 “density” : z軸を(度数)/(階級幅)の密度にする正規化表現 ”probability density” : “density”の面積全体を1にする正規化表現 |
冒頭のグラフのコードはこちら
fig = go.Figure()
#2次元ヒストグラムの作図
fig.add_trace(go.Histogram2d(x=df_wine['alcohol'],
y=df_wine['color_intensity'],
colorbar=dict(title=dict(text='percent')),
colorscale="RdBu",
xgap=2.5,ygap=2.5,
texttemplate= "%{z:.2f}",
xbins=dict(start=11,
end=15,
size=0.5),
ybins=dict(start=0,
end=14,
size=2.0),
histnorm="percent"
))
#軸の設定
fig.update_xaxes(title='alcohol')
fig.update_yaxes(title='color intensity')
fig.show()
読了お疲れ様でした!
以上,【plotly】今すぐできる!2次元ヒストグラムの作図 でした!
コメント