本記事ではPythonのグラフライブラリとして使えるplotlyによる「箱ひげ図」の作成について紹介します。
plotlyチュートリアルの箱ひげ図から例題を抜粋しながら解説していきます。
プログラミングをこれから初める方向けに簡単なグラフを5種選びました。
①単純な箱ひげ図
②箱ひげ図+全プロットデータ
③散布図+箱ひげ図
④ヒストグラム+箱ひげ図
⑤等高線図+箱ひげ図
⑥gragh_bjectsを使ったgo.Boxプロット
今回紹介する例題ではグラフの元データを容易する必要がなく、下記プログラムを完コピすればグラフを作成することができます。
まずは実際に手を動かしてコードを書いて見てください。
Anacondaのインストールがまだの方はこちらの記事を参考に準備してください。
Jupyter notebookの起動と使い方まで紹介しています。
導入から基本的な使い方まで紹介しています。
今回も前回同様plotly_expressを使用するので、まずはインポートします。
import plotly.express as px
import plotly.io as pio
元データはplotly_expressで用意されているdata.tipsを使用します。
1行目がデータを準備するコードです。
dfという変数にtipsのデータを読み出して使う準備をします。
tipsの中には合計消費量(totall_bill)(チップを除く)、チップ量(tip)、顧客の性別(sex)、消費した曜日(day)、消費期間(time)、食事回数(size)を含む7つのフィールドが含まれています。
2行目がグラフを作成するコードです。
fig=px.box()がplotly_express(px)で箱ひげ図(box)を使いますよという意味です。
figはただの変数なので何でも大丈夫です。figure=図を意味しているので良く使われる表現です。
x=’time’でディナーとランチタイムのデータがx軸となり、y=’totall_bill’で合計消費量の箱ひげ図が表示されます。
3行目はJupyter上にグラフを表示するコードです。
先ほど作った変数figに図のデータが入っているので表示する命令であるshow()で表示されます。
4行目は保存するコードです。(保存場所はJupyterの階層と同じ場所になります)
これはなくても大丈夫です。
htmlで保存すると、開いてグラフを動かすことが可能です。
また、マウスをグラフに当てた時に右上に表示されるカメラマークを押すとpngで保存できます。
また、箱ひげ図にカーソルを合わせると最大値、第三四分位数(q3)、第二四分位数(中央値)、第一四分位数(q1)、最小値のデータが表示され、外れ値にカーソルを合わせるとそのy値がホバー表示されます。
df = px.data.tips()
fig = px.box(df, x="time", y="total_bill")
fig.show()
pio.write_html(fig,file="./5-1.html")
②箱ひげ図+全プロットデータ
①同様、2行目がグラフを作成するコードです。
points=”all”を追加することで全データのプロットを別途表示することができます。
df = px.data.tips()
fig = px.box(df, x="time", y="total_bill", points="all")
fig.show()
pio.write_html(fig,file="./5-2.html")
③散布図+箱ひげ図
①同様、2行目がグラフを作成するコードです。
fig=px.scatter()で散布図が作成できます。
color=”sex”を追加することで性別の系列が増え、facet_row=”time”で時間帯別にグラフを並列に並べることができます(y軸共通)。
最後にmarginal_y=”box”でy軸を共通とした箱ひげ図を追加できます。
df = px.data.tips()
fig = px.scatter(df, x="total_bill", y="tip", color="sex", facet_row="time",
marginal_y="box")
fig.show()
pio.write_html(fig,file="./5-3.html")
④ヒストグラム+箱ひげ図
fig=px.histogram()でヒストグラムが作成できます。
marginal=”box”でx軸を共通とした箱ひげ図を追加できます。
df = px.data.iris()
fig = px.histogram(df, x="sepal_length", color="species", marginal="box")
fig.show()
pio.write_html(fig,file="./5-4.html")
fig=px.density_heatmap()で等高線図が作成できます。
marginal_x=”box”、marginal_y=”violin”でx軸を共通とした箱ひげ図、y軸を共通としたバイオリンプロットを追加できます。
df = px.data.iris()
fig = px.density_heatmap(df, x="sepal_length", y="sepal_width", marginal_x="box", marginal_y="violin")
fig.show()
pio.write_html(fig,file="./5-5.html")
最後にgo.Boxを使用して箱ひげ図を書く例です。
boxpoints=’all’とすることで全プロットのデータが表示できる機能が便利です。
import plotly.graph_objects as go
fig = go.Figure(data=[go.Box(y=[0, 1, 1, 2, 3, 5, 8, 13, 21],
boxpoints='all', # can also be outliers, or suspectedoutliers, or False
jitter=0.3, # add some jitter for a better separation between points
pointpos=-1.8 # relative position of points wrt box
)])
fig.show()
↓Plotlyについて学べる数少ない参考書です。