Plotly⑩(バイオリン図)

今回は、Plotlyでバイオリン図を描画してみます。

データの読み込み

まずはデータを読み込みます。

準備するデータはtipsデータセット(レストランの支払金額とチップの金額)です。

tipsデータセットから曜日ごとのデータを取り出しています。(7~10行目)

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
import plotly
import plotly.graph_objects as go

tips = plotly.data.tips()

# 曜日ごとのデータを抽出
tips_by_day = tips.groupby("day") # day列でグループ化
days = ["Thur", "Fri", "Sat", "Sun"]
# グループ化された各DataFrameを抽出
thur, fri, sat, sun = [tips_by_day.get_group(day) for day in days]
thur.head()

[実行結果(金曜を抽出したデータ)]

バイオリン図

Plotlyでバイオリン図を描画するにはViolinクラスを使います。

Violinクラスの引数 yにはリストなどのデータを設定します。

次のコードでは、1列目のサブプロットでバイオリン図に箱ひげ図を重ねて描画し、2列目のサブプロットではsmoker列のデータを左右に分けて描画しています。

[Google Colaboratory]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
from plotly.subplots import make_subplots

violin_fig = make_subplots(rows=1, cols=2)
# 1列目のサブプロット
violin_fig.add_trace(
go.Violin(
y=thur["tip"],
name="Thur",
box_visible=True # 箱ひげ図を重ねて描画
),
row=1,
col=1
)
violin_fig.add_trace(
go.Violin(y=fri["tip"], name="Fri", box_visible=True), row=1, col=1
)
violin_fig.add_trace(
go.Violin(y=sat["tip"], name="Sat", box_visible=True), row=1, col=1
)
violin_fig.add_trace(
go.Violin(y=sun["tip"], name="Sun", box_visible=True), row=1, col=1
)

# 2列目のサブプロット
for data in thur, fri, sat, sun:
smoker = data.loc[data["smoker"] == "Yes"] # smoker列がYesのデータ
non_smoker = data.loc[data["smoker"] == "No"] # smoker列がNoのデータ
day = data["day"].iloc[0] # day列の先頭のデータ(ラベルに使用)
violin_fig.add_trace(
go.Violin(
x=smoker["day"],
y=smoker["tip"],
side="negative", # 左側に描画
name=f"{day}: somoker",
),
row=1,
col=2
)
violin_fig.add_trace(
go.Violin(
x=non_smoker["day"],
y=non_smoker["tip"],
side="positive", # 右側に描画
name=f"{day}: non-somoker",
),
row=1,
col=2
)
violin_fig.show()

[実行結果]

Violinクラスの引数 box_visibleTrueを渡すとバイオリン図に箱ひげ図を重ねて描画します。(9,15,18,21行目)

引数 side“negative”を渡すと左側に描画(33行目)し、“positive”を渡すと右側に描画(43行目)します。