Python

【plotlyチュートリアル】<>箱ひげ図

箱ひげ図(box plot)

作成する5種類の箱ひげ図について

本記事ではPythonのグラフライブラリとして使えるplotlyによる「箱ひげ図」の作成について紹介します。

plotlyチュートリアルの箱ひげ図から例題を抜粋しながら解説していきます。

プログラミングをこれから初める方向けに簡単なグラフを5種選びました。

①単純な箱ひげ図

②箱ひげ図+全プロットデータ

③散布図+箱ひげ図

④ヒストグラム+箱ひげ図

⑤等高線図+箱ひげ図

⑥gragh_bjectsを使ったgo.Boxプロット

今回紹介する例題ではグラフの元データを容易する必要がなく、下記プログラムを完コピすればグラフを作成することができます。

まずは実際に手を動かしてコードを書いて見てください。

AnacondaのインストールとJupyter notebookの準備

Anacondaのインストールがまだの方はこちらの記事を参考に準備してください。

Jupyter notebookの起動と使い方まで紹介しています。

【2020年版、Python3をはじめよう!(Mac&Win対応)】AnacondaとJupyter notebookの始め方 はじめに Jupyter notebookとは Jupyter notebook(ジュピター・ノートブック)はブラウザ上で...

plotlyとplotly_expressのインストール

導入から基本的な使い方まで紹介しています。

Pythonをグラフ作成で学ぶ【plotly_expressで1行プログラミング】 【本記事の目標】 たった1行で動くグラフを作成し、体感する! これからPythonを学びたい人向けに朗報です。 今から紹介...

①単純な箱ひげ図

今回も前回同様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")

⑥gragh_bjectsを使ったgo.Boxプロット

最後に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に関する書籍紹介

↓Plotlyについて学べる数少ない参考書です。

Mickey@コーヒー好きエンジニア

【製造業×プログラミング×AI】Python/VBAを活用した業務改善、Streamlit/Plotlyを活用したWebアプリ開発について初心者向けに発信中|趣味は自家焙煎コーヒー作り|noteでは焙煎理論を発信|ココナラではプログラミングに関する相談,就職/転職やコーヒーに関する相談などのサービスをやっています