バイオリン図
violinplot【バイオリン図 (データ指定)】3.2 / 3.93.10
violin【バイオリン図 (データ分布指定)】3.2 / 3.93.10

axes.Axes.violinplot【バイオリン図 (データ指定)】3.2 / 3.93.10
pyplot.violinplot【バイオリン図 (データ指定)】3.2 / 3.93.10
メモ
基本
〔 例:axes.Axes.violinplot 〕〔 例:pyplot.violinplot 〕- データ指定でグラフを描画
- データ分布指定は violin【バイオリン図 (データ分布指定)】
- データの指定方法
- 単一図:dataset (データ / データキー)に1次元配列
- 複数図:dataset (データ / データキー)に2次元配列
- 単一図 (データキー指定):data (キー付きデータ)にデータ指定、dataset (データ / データキー)に対応データキー指定
- 各図の位置
- デフォルトは、1からの整数値
- 通常は、set_xticks【x軸目盛り 設定】等でラベル指定
(水平方向プロットは、set_yticks【y軸目盛り 設定】等)
- プロット方向
- vert (プロット方向)3.10 指定
- orientation (プロット方向)3.10 指定
- 非対称描画:side (描画サイド)3.9 指定
- 箱ひげ図との比較:箱ひげ図 の バイオリン図との比較 参照
カスタマイズ
〔 例 〕- 幅
- 複数図:widths (最大幅)を指定
- 単一図:デフォルトで大きく描画しようとする為、set_xlim【x軸表示範囲 設定】等とwidths (最大幅)で調整
- 値の線分の表示有無 (下記を指定)
- その他
- 戻り値の各コンポーネントを利用して色等の変更可能
- 本体領域のアルファ値がデフォルトで1(不透明)ではないので注意
関連設定
〔 例 〕- タイトル・目盛り等:設定・グラフパーツ 参照
関連
外部リンク
構文
axes.violinplot(
dataset (データ / データキー),
positions (各図の位置)=None,
vert (プロット方向)3.10 =True,
orientation (プロット方向)3.10 ='vertical',
widths (最大幅)=0.5,
showmeans (平均値の表示有無)=False,
showextrema (最大値・最小値の表示有無)=True,
showmedians (中央値の表示有無)=False,
quantiles (レンダリング分位値)=None, 3.2
points (評価ポイント数)=100,
bw_method (推定帯域幅の計算方法)=None,
side (描画サイド)='both', 3.9
*,
data (キー付きデータ)=None)
pyplot.violinplot(同上)
(dict)各コンポーネント (キーは以下参照:表示ありで有効)
bodies (PolyCollection)本体領域
cmeans (LineCollection)平均値の線分
cmins (LineCollection)最小値の線分
cmaxes (LineCollection)最大値の線分
cbars (LineCollection)中心線の線分
cmedians (LineCollection)中央値の線分
cquantiles (LineCollection)分位値の線分
dataset (配列 | ベクトルのシーケンス | 文字列)データ / データキー
ベクトルのシーケンス単一図
2次元配列複数図
文字列data (キー付きデータ)の対応キー
positions (配列形式)各図の位置 (省略:[1, 2, …, n])
vert (bool)3.10プロット方向 (True:垂直方向 / False:水平方向)
orientation3.10プロット方向
'horizontal'水平方向
'vertical' | その他垂直方向
widths (スカラー float3.9 | 配列形式)各図の最大幅 (重ならない最大幅:1.0)
showmeans (bool)平均値の表示有無 (True:表示 / False:非表示)
showextrema (bool)最大値・最小値の表示有無 (True:表示 / False:非表示)
showmedians (bool)中央値の表示有無 (True:表示 / False:非表示)
quantiles (配列形式)3.2レンダリング分位値 (値:0.0~1.0)
points (int)各ガウスカーネル密度推定の評価ポイント数
bw_method (str | スカラー float3.9 | 呼出し可)推定帯域幅の計算方法
'scott'スコットの方法
'silverman'シルバーマンの方法
スカラー float3.9kde.factor として使用
呼出し可使用関数 (引数:mlab.GaussianKDEのインスタンス / 戻り値:スカラー float3.9)
side3.9描画サイド
'both'両側描画 (通常:左右(上下)対称のバイオリン図)
'low'左(下)側描画
'high'右(上)側描画
以降は キーワード引数
data (インデックス可能オブジェクト)キー付きデータ
dataset (データ / データキー)に対応データキーを指定
設定・グラフパーツ
pyplot. | axes.Axes. | その他 | |
---|---|---|---|
タイトル | suptitle【タイトル設定 (全体)】 title【タイトル設定】 | set_title【タイトル設定】 get_title【タイトル取得】 Axes3D.set_title【タイトル設定】 | figure.Figure.suptitle【タイトル設定 (全体)】 figure.SubFigure.suptitle figure.Figure.align_titles【タイトル調整】3.9 |
軸ラベル | xlabel【x軸ラベル 設定】3.3 ylabel【y軸ラベル 設定】3.3 | set_xlabel【x軸ラベル 設定】3.3 set_ylabel【y軸ラベル 設定】3.3 Axes3D.set_zlabel【z軸ラベル 設定】 get_xlabel【x軸ラベル 取得】 get_ylabel【y軸ラベル 取得】 Axes3D.get_zlabel【z軸ラベル 取得】 | align_labels【ラベル調整】 figure.Figure.supxlabel【x軸ラベル(全体) 設定】3.43.6 figure.Figure.supylabel【y軸ラベル(全体) 設定】3.43.6 figure.SubFigure.supxlabel figure.SubFigure.supylabel projections.polar.PolarAxes.set_rlabel_position【半径ラベルのシータ位置設定】 |
clabel【等高線ラベル 設定】 | |||
表示範囲 | xlim【x軸表示範囲 取得・設定】 ylim【y軸表示範囲 取得・設定】 axis【表示範囲等 取得・設定】3.1~3.4 / 3.7 | set_xlim【x軸表示範囲 設定】3.1 / 3.6 set_ylim【y軸表示範囲 設定】3.1 / 3.6 get_xlim【x軸表示範囲 取得】 get_ylim【y軸表示範囲 取得】 axis【表示範囲等 取得・設定】3.1~3.4 / 3.7 | projections.polar.PolarAxes.set_rlim【極座標範囲 設定】 |
Axes3D.set_xlim【3D x軸表示範囲 設定】 Axes3D.set_xlim3d【3D x軸表示範囲 設定】 Axes3D.set_ylim【3D y軸表示範囲 設定】 Axes3D.set_ylim3d【3D y軸表示範囲 設定】 Axes3D.set_zlim【3D z軸表示範囲 設定】 Axes3D.set_zlim3d【3D z軸表示範囲 設定】 Axes3D.get_xlim3d【3D x軸表示範囲 取得】 Axes3D.get_ylim3d【3D y軸表示範囲 取得】 Axes3D.get_zlim3d【3D z軸表示範囲 取得】 | |||
データ上限・下限 | set_xbound【x軸データ上限・下限 設定】 set_ybound【y軸データ上限・下限 設定】 get_xbound【x軸データ上限・下限 取得】 get_ybound【y軸データ上限・下限 取得】 | projections.polar.PolarAxes.set_rmax【極座標上限 設定】 projections.polar.PolarAxes.set_rmin【極座標下限 設定】 | |
目盛り | xticks【x軸目盛り (ラベル) 取得・設定】3.6 yticks【y軸目盛り (ラベル) 取得・設定】3.6 locator_params【目盛り制御】 minorticks_on minorticks_off ticklabel_format【目盛りフォーマット設定 (指数形式)】 tick_params【目盛り・グリッド線 外観変更】 | set_xticks【x軸目盛り 設定】3.2 / 3.5 set_yticks【y軸目盛り 設定】3.2 / 3.5 Axes3D.set_zticks【z軸目盛り 設定】 set_xticklabels【x軸目盛りラベル 設定】3.3 / 3.5 set_yticklabels【y軸目盛りラベル 設定】3.3 / 3.5 Axes3D.set_zticklabels【z軸目盛りラベル 設定】 get_xticks【x軸目盛り 取得】3.2 get_yticks【y軸目盛り 取得】3.2 Axes3D.get_zticks【z軸目盛り 取得】 get_xticklabels【x軸目盛りラベル 取得】3.3 / 3.6 get_yticklabels【y軸目盛りラベル 取得】3.3 / 3.6 Axes3D.get_zticklabels【z軸目盛りラベル 取得】 get_xmajorticklabels【x軸目盛りラベル 取得 (主)】3.3 / 3.6 get_ymajorticklabels【y軸目盛りラベル 取得 (主)】3.3 / 3.6 get_xminorticklabels【x軸目盛りラベル 取得 (補助)】3.3 / 3.6 get_yminorticklabels【y軸目盛りラベル 取得 (補助)】3.3 / 3.6 get_xticklines get_yticklines xaxis_date yaxis_date minorticks_on minorticks_off ticklabel_format【目盛りフォーマット設定 (指数形式)】 tick_params【目盛り・グリッド線 外観変更】 locator_params【目盛り制御】 fmt_xdata fmt_ydata | ticker【目盛りモジュール】 axis.Axis.set_ticks【目盛り 設定】 axis.Axis.set_ticklabels【目盛りラベル 設定】 axis.Axis.set_tick_params【目盛り・グリッド線 外観変更】 axis.XAxis.set_ticks_position【x軸目盛り位置 設定】 axis.YAxis.set_ticks_position【y軸目盛り位置 設定】 Axes3D.locator_params【目盛り制御】 axis.Axis.set_major_formatter【フォーマッタ設定 (主)】 axis.Axis.set_minor_formatter【フォーマッタ設定 (補助)】 axis.Axis.set_major_locator【ロケータ設定 (主)】 axis.Axis.set_minor_locator【ロケータ設定 (補助)】 axis.Axis.get_ticklabels【目盛りラベル取得】 axis.Axis.get_majorticklabels【目盛りラベル取得 (主)】 axis.Axis.get_minorticklabels【目盛りラベル取得 (補助)】 axis.Axis.get_major_formatter【フォーマッタ取得 (主)】 axis.Axis.get_minor_formatter【フォーマッタ取得 (補助)】 axis.Axis.get_ticklocs axis.Axis.get_major_locator【ロケータ取得 (主)】 axis.Axis.get_minor_locator【ロケータ取得 (補助)】 figure.Figure.autofmt_xdate【x軸日付目盛りラベル回転】 axis.Axis.get_tick_params【目盛り・グリッド線 外観取得】3.7 |
直線 範囲 | axhline【水平線 (単一)】3.9 axvline【垂直線 (単一)】 hlines【水平線 (複数)】3.3 vlines【垂直線 (複数)】3.3 axhspan【水平範囲】3.9 axvspan【垂直範囲】3.9 axline【直線】3.3 |
例:基本 (axes.Axes.violinplot)
import matplotlib.pyplot as plt
import numpy as np
# 初期設定
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] = \
['Yu Gothic', 'Hiragino Maru Gothic Pro', 'Noto Sans CJK JP']
fig, axs = plt.subplots(
2, 3,
figsize=(9, 6),
tight_layout=True,
)
# データ
rng = np.random.default_rng(12345)
dataset_0 = np.r_[
rng.normal(loc=25, scale=10, size=100).astype(int),
rng.normal(loc=75, scale=10, size=300).astype(int),
]
dataset_0 = np.clip(dataset_0, 0, 100)
dataset_1 = np.r_[
rng.normal(loc=25, scale=10, size=200).astype(int),
rng.normal(loc=75, scale=10, size=200).astype(int),
]
dataset_1 = np.clip(dataset_1, 0, 100)
dataset_2 = np.r_[
rng.normal(loc=25, scale=10, size=300).astype(int),
rng.normal(loc=75, scale=10, size=100).astype(int),
]
dataset_2 = np.clip(dataset_2, 0, 100)
# グラフ (0, 0)
axs[0, 0].set_title('データ指定 (単一図)')
axs[0, 0].violinplot(
dataset_1,
)
axs[0, 0].set_xticks([1], ['Data 1'])
# グラフ (0, 1)
axs[0, 1].set_title('データ指定 (複数図)')
axs[0, 1].violinplot(
[dataset_0, dataset_1, dataset_2],
)
axs[0, 1].set_xticks(
[1, 2, 3],
['Data 0', 'Data 1', 'Data 2'],
)
# グラフ (0, 2)
axs[0, 2].set_title('非対称 (垂直)')
axs[0, 2].violinplot(
dataset_0,
positions=[1],
widths=1.0,
side='low',
)
axs[0, 2].violinplot(
dataset_2,
positions=[2],
widths=1.0,
side='high',
)
axs[0, 2].violinplot(
dataset_0,
positions=[3],
widths=1.0,
side='low',
)
axs[0, 2].violinplot(
dataset_2,
positions=[3],
widths=1.0,
side='high',
)
axs[0, 2].set_xticks(
[1, 2, 3],
['Data 0', 'Data 2', 'Data 0\nData 2'],
)
# グラフ (1, 0)
axs[1, 0].set_title('データキー指定')
axs[1, 0].violinplot(
'DATA_1',
data={
'DATA_0': dataset_0,
'DATA_1': dataset_1,
'DATA_2': dataset_2,
},
)
axs[1, 0].set_xticks([1], ['Data 1'])
# グラフ (1, 1)
axs[1, 1].set_title('データ指定 (複数図・水平方向)')
axs[1, 1].violinplot(
[dataset_0, dataset_1, dataset_2],
# vert=False, # [~3.9]
orientation='horizontal', # [3.10~]
)
axs[1, 1].set_yticks(
[1, 2, 3],
['Data 0', 'Data 1', 'Data 2'],
)
# グラフ (1, 2)
axs[1, 2].set_title('非対称 (水平)')
axs[1, 2].violinplot(
dataset_0,
positions=[1],
# vert=False, # [~3.9]
orientation='horizontal', # [3.10~]
widths=1.0,
side='low',
)
axs[1, 2].violinplot(
dataset_2,
positions=[2],
# vert=False, # [~3.9]
orientation='horizontal', # [3.10~]
widths=1.0,
side='high',
)
axs[1, 2].violinplot(
dataset_0,
positions=[3],
# vert=False, # [~3.9]
orientation='horizontal', # [3.10~]
widths=1.0,
side='low',
)
axs[1, 2].violinplot(
dataset_2,
positions=[3],
# vert=False, # [~3.9]
orientation='horizontal', # [3.10~]
widths=1.0,
side='high',
)
axs[1, 2].set_yticks(
[1, 2, 3],
['Data 0', 'Data 2', 'Data 2\nData 0'],
)
# 表示
plt.show()
例:基本 (pyplot.violinplot)
import matplotlib.pyplot as plt
import numpy as np
# 初期設定
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] = \
['Yu Gothic', 'Hiragino Maru Gothic Pro', 'Noto Sans CJK JP']
plt.figure(
figsize=(3, 3),
tight_layout=True,
)
# データ
rng = np.random.default_rng(12345)
dataset_0 = np.r_[
rng.normal(loc=25, scale=10, size=100).astype(int),
rng.normal(loc=75, scale=10, size=300).astype(int),
]
dataset_0 = np.clip(dataset_0, 0, 100)
dataset_1 = np.r_[
rng.normal(loc=25, scale=10, size=200).astype(int),
rng.normal(loc=75, scale=10, size=200).astype(int),
]
dataset_1 = np.clip(dataset_1, 0, 100)
dataset_2 = np.r_[
rng.normal(loc=25, scale=10, size=300).astype(int),
rng.normal(loc=75, scale=10, size=100).astype(int),
]
dataset_2 = np.clip(dataset_2, 0, 100)
# グラフ (0, 1)
plt.title('pyplot.violinplot\n【バイオリン図 (データ指定)】')
plt.violinplot(
[dataset_0, dataset_1, dataset_2],
)
plt.xticks(
[1, 2, 3],
['Data 0', 'Data 1', 'Data 2'],
)
# 表示
plt.show()
例:カスタマイズ
import matplotlib.pyplot as plt
import numpy as np
# 初期設定
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] = \
['Yu Gothic', 'Hiragino Maru Gothic Pro', 'Noto Sans CJK JP']
fig, axs = plt.subplots(
2, 2,
figsize=(6, 6),
tight_layout=True,
)
# データ
rng = np.random.default_rng(12345)
dataset_0 = np.r_[
rng.normal(loc=25, scale=10, size=100).astype(int),
rng.normal(loc=75, scale=10, size=300).astype(int),
]
dataset_0 = np.clip(dataset_0, 0, 100)
dataset_1 = np.r_[
rng.normal(loc=25, scale=10, size=200).astype(int),
rng.normal(loc=75, scale=10, size=200).astype(int),
]
dataset_1 = np.clip(dataset_1, 0, 100)
dataset_2 = np.r_[
rng.normal(loc=25, scale=10, size=300).astype(int),
rng.normal(loc=75, scale=10, size=100).astype(int),
]
dataset_2 = np.clip(dataset_2, 0, 100)
# グラフ (0, 0)
axs[0, 0].set_title('デフォルト (単一図)')
axs[0, 0].violinplot(
dataset_1,
)
# グラフ (0, 1)
axs[0, 1].set_title('カスタマイズ (単一図)')
parts_01 = axs[0, 1].violinplot(
dataset_1,
widths=1.0,
showmeans=True,
showextrema=True,
showmedians=True,
quantiles=[0.25, 0.75], # 説明用の値
)
axs[0, 1].set_xlim(0, 2)
axs[0, 1].set_xticks([1], ['Data 1'])
# 本体領域
print(parts_01['bodies'][0].get_alpha())
# 出力:0.3
parts_01['bodies'][0].set_alpha(1)
parts_01['bodies'][0].set_facecolor('lightgreen')
parts_01['bodies'][0].set_edgecolor('black')
parts_01['bodies'][0].set_linewidth(2)
# 平均値の線分
parts_01['cmeans'].set_color('red')
parts_01['cmeans'].set_linewidth(3)
# 最小値の線分
parts_01['cmins'].set_color('orange')
parts_01['cmins'].set_linewidth(3)
# 最大値の線分
parts_01['cmaxes'].set_color('orange')
parts_01['cmaxes'].set_linewidth(3)
# 中心線の線分
parts_01['cbars'].set_colors('green')
parts_01['cbars'].set_linewidth(3)
# 中央値の線分
parts_01['cmedians'].set_color('cyan')
parts_01['cmedians'].set_linewidth(3)
# 分位値の線分
parts_01['cquantiles'].set_color('white')
parts_01['cquantiles'].set_linewidth(3)
# グラフ (1, 0)
axs[1, 0].set_title('デフォルト (複数図)')
axs[1, 0].violinplot(
[dataset_0, dataset_1, dataset_2],
)
# グラフ (1, 1)
axs[1, 1].set_title('カスタマイズ (複数図)')
parts_11 = axs[1, 1].violinplot(
[dataset_0, dataset_1, dataset_2],
widths=0.9,
showmeans=True,
showextrema=True,
showmedians=True,
quantiles=[[0.25, 0.75], [0.25, 0.75], [0.25, 0.75]], # 説明用の値
)
axs[1, 1].set_xticks(
[1, 2, 3],
['Data 0', 'Data 1', 'Data 2'],
)
# 本体領域
print(parts_11['bodies'][0].get_alpha())
# 出力:0.3
# parts_11['bodies'][0].set_alpha(1)
parts_11['bodies'][0].set_facecolor('red')
parts_11['bodies'][0].set_edgecolor('cyan')
parts_11['bodies'][0].set_linewidth(5)
# parts_11['bodies'][1].set_alpha(1)
parts_11['bodies'][1].set_facecolor('green')
parts_11['bodies'][1].set_edgecolor('cyan')
parts_11['bodies'][1].set_linewidth(5)
# parts_11['bodies'][2].set_alpha(1)
parts_11['bodies'][2].set_facecolor('blue')
parts_11['bodies'][2].set_edgecolor('cyan')
parts_11['bodies'][2].set_linewidth(5)
# 平均値の線分
parts_11['cmeans'].set_color('red')
parts_11['cmeans'].set_linewidth(2)
# 最小値の線分
parts_11['cmins'].set_color('orange')
parts_11['cmins'].set_linewidth(2)
# 最大値の線分
parts_11['cmaxes'].set_color('orange')
parts_11['cmaxes'].set_linewidth(2)
# 中心線の線分
parts_11['cbars'].set_colors(['red', 'green', 'blue'])
parts_11['cbars'].set_linewidth(2)
# 中央値の線分
parts_11['cmedians'].set_color('cyan')
parts_11['cmedians'].set_linewidth(2)
# 分位値の線分
parts_11['cquantiles'].set_color('white')
parts_11['cquantiles'].set_linewidth(2)
# 表示
plt.show()
例:関連設定
import matplotlib.pyplot as plt
import numpy as np
# 初期設定
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] = \
['Yu Gothic', 'Hiragino Maru Gothic Pro', 'Noto Sans CJK JP']
fig, axs = plt.subplots(
1, 2,
figsize=(6, 3),
tight_layout=True,
)
plt.suptitle('suptitle【タイトル (全体)】')
# データ
rng = np.random.default_rng(12345)
dataset_0 = np.r_[
rng.normal(loc=25, scale=10, size=100).astype(int),
rng.normal(loc=75, scale=10, size=300).astype(int),
]
dataset_0 = np.clip(dataset_0, 0, 100)
dataset_1 = np.r_[
rng.normal(loc=25, scale=10, size=200).astype(int),
rng.normal(loc=75, scale=10, size=200).astype(int),
]
dataset_1 = np.clip(dataset_1, 0, 100)
dataset_2 = np.r_[
rng.normal(loc=25, scale=10, size=300).astype(int),
rng.normal(loc=75, scale=10, size=100).astype(int),
]
dataset_2 = np.clip(dataset_2, 0, 100)
# グラフ (0)
axs[0].violinplot(
[dataset_0, dataset_1, dataset_2],
)
# タイトル 設定
axs[0].set_title('title【タイトル】')
# 軸ラベル 設定
axs[0].set_xlabel('xlabel【x軸ラベル】')
axs[0].set_ylabel('ylabel【y軸ラベル】')
# 範囲 追加
axs[0].axhspan(
30, 70,
facecolor='lightyellow',
edgecolor='red',
zorder=0.9
)
# 目盛り 設定
axs[0].set_xticks(
[1, 2, 3],
['Data A', 'Data B', 'Data C'],
)
# データ上限・下限 設定
axs[0].set_ybound(10, 90)
# グラフ (1)
axs[1].violinplot(
[dataset_0, dataset_1, dataset_2],
)
# タイトル 設定
axs[1].set_title('title【タイトル】')
# 軸ラベル 設定
axs[1].set_xlabel('xlabel【x軸ラベル】')
axs[1].set_ylabel('ylabel【y軸ラベル】')
# 目盛り 設定
axs[1].set_xticks(
[1, 2, 3],
['Data X', 'Data Y', 'Data Z'],
)
# 水平線 追加
axs[1].axhline(25, linestyle='--', color='red')
axs[1].axhline(50)
axs[1].axhline(75, linestyle='--', color='red')
# 表示範囲 設定
axs[1].set_ylim(-20, 120)
# 表示
plt.show()
axes.Axes.violin【バイオリン図 (データ分布指定)】3.2 / 3.93.10
メモ
基本
〔 例 〕- データ分布指定でグラフを描画
- データ指定は violinplot【バイオリン図 (データ指定)】
- データ分布をデータから求めるには、cbook.violin_stats を使用
(但し、violinplot【バイオリン図 (データ指定)】内ではデフォルトではなく独自関数を指定)
- データ分布の指定方法
- 単一図:vpstats (データ分布)に1次元配列
- 複数図:vpstats (データ分布)に2次元配列
- 各図の位置
- デフォルトは、1からの整数値
- 通常は、set_xticks【x軸目盛り 設定】等でラベル指定
(水平方向プロットは、set_yticks【y軸目盛り 設定】等)
- プロット方向
- vert (プロット方向)3.10 指定
- orientation (プロット方向)3.10 指定
- 非対称描画:side (描画サイド)3.9 指定
- 箱ひげ図との比較:箱ひげ図 の バイオリン図との比較 参照
カスタマイズ
〔 例 〕- 幅
- 複数図:widths (最大幅)を指定
- 単一図:デフォルトで大きく描画しようとする為、set_xlim【x軸表示範囲 設定】等とwidths (最大幅)で調整
- 値の線分の表示有無 (下記を指定)
- その他
- 戻り値の各コンポーネントを利用して色等の変更可能
- 本体領域のアルファ値がデフォルトで1(不透明)ではないので注意
関連設定
〔 例:violinplot【バイオリン図 (データ指定)】 〕- タイトル・目盛り等:violinplot【バイオリン図 (データ指定)】の設定・グラフパーツ 参照
関連
外部リンク
構文
axes.violin(
vpstats (データ分布),
positions (各図の位置)=None,
vert (プロット方向)3.10 =True,
orientation (プロット方向)3.10 ='vertical',
widths (最大幅)=0.5,
showmeans (平均値の表示有無)=False,
showextrema (最大値・最小値の表示有無)=True,
showmedians (中央値の表示有無)=False,
side (描画サイド)='both' 3.9 )
(dict)各コンポーネント (キーは以下参照:表示ありで有効)
bodies (PolyCollection)本体領域
cmeans (LineCollection)平均値の線分
cmins (LineCollection)最小値の線分
cmaxes (LineCollection)最大値の線分
cbars (LineCollection)中心線の線分
cmedians (LineCollection)中央値の線分
cquantiles (LineCollection)分位値の線分
vpstats (list[dict])データ分布
必須キー
coordsカーネル密度推定の評価座標のリスト
valscoordsの各座標でのカーネル密度推定値のリスト
mean平均値
median中央値
min最小値
max最大値
任意キー
quantiles3.2分位値のリスト
positions (配列形式)各図の位置 (省略:[1, 2, …, n])
vert (bool)3.10プロット方向 (True:垂直方向 / False:水平方向)
orientation3.10プロット方向
'horizontal'水平方向
'vertical' | その他垂直方向
widths (配列形式)各図の最大幅 (重ならない最大幅:1.0)
showmeans (bool)平均値の表示有無 (True:表示 / False:非表示)
showextrema (bool)最大値・最小値の表示有無 (True:表示 / False:非表示)
showmedians (bool)中央値の表示有無 (True:表示 / False:非表示)
side3.9描画サイド
'both'両側描画 (通常:左右(上下)対称のバイオリン図)
'low'左(下)側描画
'high'右(上)側描画
例:基本
import matplotlib.pyplot as plt
# 初期設定
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] = \
['Yu Gothic', 'Hiragino Maru Gothic Pro', 'Noto Sans CJK JP']
fig, axs = plt.subplots(
2, 3,
figsize=(9, 6),
tight_layout=True,
)
# データ分布
dataset_a = {
'coords': [~],
'vals': [~],
'mean': ~,
'median': ~,
'min': ~,
'max': ~,
}
dataset_b = {
'coords': [~],
'vals': [~],
'mean': ~,
'median': ~,
'min': ~,
'max': ~,
}
dataset_c = {
'coords': [~],
'vals': [~],
'mean': ~,
'median': ~,
'min': ~,
'max': ~,
}
vpstats_0 = [dataset_a]
vpstats_1 = [dataset_b]
vpstats_2 = [dataset_c]
vpstats_3 = [dataset_a, dataset_b, dataset_c]
# グラフ (0, 0)
axs[0, 0].set_title('単一図・垂直方向')
axs[0, 0].violin(
vpstats_1,
)
axs[0, 0].set_xticks([1], ['Data B'])
# グラフ (0, 1)
axs[0, 1].set_title('複数図・垂直方向')
axs[0, 1].violin(
vpstats_3,
)
axs[0, 1].set_xticks(
[1, 2, 3],
['Data A', 'Data B', 'Data C'],
)
# グラフ (0, 2)
axs[0, 2].set_title('非対称・垂直方向')
axs[0, 2].violin(
vpstats_0,
positions=[1],
widths=1.0,
side='low',
)
axs[0, 2].violin(
vpstats_2,
positions=[2],
widths=1.0,
side='high',
)
axs[0, 2].violin(
vpstats_0,
positions=[3],
widths=1.0,
side='low',
)
axs[0, 2].violin(
vpstats_2,
positions=[3],
widths=1.0,
side='high',
)
axs[0, 2].set_xticks(
[1, 2, 3],
['Data A', 'Data C', 'Data A\nData C'],
)
# グラフ (1, 0)
axs[1, 0].set_title('単一図・水平方向')
axs[1, 0].violin(
vpstats_1,
# vert=False, # [~3.9]
orientation='horizontal', # [3.10~]
)
axs[1, 0].set_yticks([1], ['Data B'])
# グラフ (1, 1)
axs[1, 1].set_title('複数図・水平方向')
axs[1, 1].violin(
vpstats_3,
# vert=False, # [~3.9]
orientation='horizontal', # [3.10~]
)
axs[1, 1].set_yticks(
[1, 2, 3],
['Data A', 'Data B', 'Data C'],
)
# グラフ (1, 2)
axs[1, 2].set_title('非対称・水平方向')
axs[1, 2].violin(
vpstats_0,
positions=[1],
# vert=False, # [~3.9]
orientation='horizontal', # [3.10~]
widths=1.0,
side='low',
)
axs[1, 2].violin(
vpstats_2,
positions=[2],
# vert=False, # [~3.9]
orientation='horizontal', # [3.10~]
widths=1.0,
side='high',
)
axs[1, 2].violin(
vpstats_0,
positions=[3],
# vert=False, # [~3.9]
orientation='horizontal', # [3.10~]
widths=1.0,
side='low',
)
axs[1, 2].violin(
vpstats_2,
positions=[3],
# vert=False, # [~3.9]
orientation='horizontal', # [3.10~]
widths=1.0,
side='high',
)
axs[1, 2].set_yticks(
[1, 2, 3],
['Data A', 'Data C', 'Data C\nData A'],
)
# 表示
plt.show()
例:カスタマイズ
import matplotlib.pyplot as plt
# 初期設定
plt.rcParams['font.family'] = 'sans-serif'
plt.rcParams['font.sans-serif'] = \
['Yu Gothic', 'Hiragino Maru Gothic Pro', 'Noto Sans CJK JP']
fig, axs = plt.subplots(
2, 2,
figsize=(6, 6),
tight_layout=True,
)
# データ分布
dataset_a = {
'coords': [~],
'vals': [~],
'mean': ~,
'median': ~,
'min': ~,
'max': ~,
'quantiles': [25, 75], # 説明用の値
}
dataset_b = {
'coords': [~],
'vals': [~],
'mean': ~,
'median': ~,
'min': ~,
'max': ~,
'quantiles': [25, 75], # 説明用の値
}
dataset_c = {
'coords': [~],
'vals': [~],
'mean': ~,
'median': ~,
'min': ~,
'max': ~,
'quantiles': [25, 75], # 説明用の値
}
vpstats_1 = [dataset_b]
vpstats_3 = [dataset_a, dataset_b, dataset_c]
# グラフ (0, 0)
axs[0, 0].set_title('デフォルト (単一図)')
axs[0, 0].violin(
vpstats_1,
)
# グラフ (0, 1)
axs[0, 1].set_title('カスタマイズ (単一図)')
parts_01 = axs[0, 1].violin(
vpstats_1,
widths=1.0,
showmeans=True,
showextrema=True,
showmedians=True,
)
axs[0, 1].set_xlim(0, 2)
axs[0, 1].set_xticks([1], ['Data B'])
# 本体領域
print(parts_01['bodies'][0].get_alpha())
# 出力:0.3
parts_01['bodies'][0].set_alpha(1)
parts_01['bodies'][0].set_facecolor('lightgreen')
parts_01['bodies'][0].set_edgecolor('black')
parts_01['bodies'][0].set_linewidth(2)
# 平均値の線分
parts_01['cmeans'].set_color('red')
parts_01['cmeans'].set_linewidth(2)
# 最小値の線分
parts_01['cmins'].set_color('orange')
parts_01['cmins'].set_linewidth(2)
# 最大値の線分
parts_01['cmaxes'].set_color('orange')
parts_01['cmaxes'].set_linewidth(2)
# 中心線の線分
parts_01['cbars'].set_colors(['green'])
parts_01['cbars'].set_linewidth(2)
# 中央値の線分
parts_01['cmedians'].set_color('cyan')
parts_01['cmedians'].set_linewidth(2)
# 分位値の線分
parts_01['cquantiles'].set_color('white')
parts_01['cquantiles'].set_linewidth(2)
# グラフ (1, 0)
axs[1, 0].set_title('デフォルト (複数図)')
axs[1, 0].violin(
vpstats_3,
)
# グラフ (1, 1)
axs[1, 1].set_title('カスタマイズ (複数図)')
parts_11 = axs[1, 1].violin(
vpstats_3,
widths=0.9,
showmeans=True,
showextrema=True,
showmedians=True,
)
axs[1, 1].set_xticks(
[1, 2, 3],
['Data A', 'Data B', 'Data C'],
)
# 本体領域
parts_11['bodies'][0].set_alpha(1)
parts_11['bodies'][0].set_facecolor('red')
parts_11['bodies'][0].set_edgecolor('black')
parts_11['bodies'][1].set_alpha(1)
parts_11['bodies'][1].set_facecolor('green')
parts_11['bodies'][1].set_edgecolor('black')
parts_11['bodies'][2].set_alpha(1)
parts_11['bodies'][2].set_facecolor('blue')
parts_11['bodies'][2].set_edgecolor('black')
# 平均値の線分
parts_11['cmeans'].set_colors(['blue', 'red', 'red'])
parts_11['cmeans'].set_linewidth(2)
# 最小値の線分
parts_11['cmins'].set_color('orange')
parts_11['cmins'].set_linewidth(2)
# 最大値の線分
parts_11['cmaxes'].set_color('orange')
parts_11['cmaxes'].set_linewidth(2)
# 中心線の線分
parts_11['cbars'].set_colors(['white', 'white', 'white'])
parts_11['cbars'].set_linewidth(2)
# 中央値の線分
parts_11['cmedians'].set_color('cyan')
parts_11['cmedians'].set_linewidth(2)
# 分位値の線分
parts_11['cquantiles'].set_color('white')
parts_11['cquantiles'].set_linewidth(2)
# 表示
plt.show()