はあなたを助けるかもしれない例です。
輸入品
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import seaborn as sns
データ
data = {'sensitivity' : np.random.normal(loc = 0, size = 10),
'specificity' : np.random.normal(loc = 0, size = 10),
'accuracy' : np.random.normal(loc = 0, size = 10),
'ppv' : np.random.normal(loc = 0, size = 10),
'auc' : np.random.normal(loc = 0, size = 10),
'cls' : ['sig', 'sig', 'sig', 'sig', 'sig', 'baseline', 'baseline', 'baseline', 'baseline', 'baseline']}
df = pd.DataFrame(data)
df
Seaborn行/ colsのは、あなたのデータを使用して構築されているサブプロットのグリッドを作成しfactorplot
と呼ばれる気の利いたツールを持っています。これを行うには、df
をより使いやすい形に「溶かす」必要があります。
df_melt = df.melt(id_vars = 'cls',
value_vars = ['accuracy',
'auc',
'ppv',
'sensitivity',
'specificity'],
var_name = 'columns')
今、私たちはCOL "列" を使用してfactorplot
を作成することができます。あなたはまた、単にSeabornの箱ひげ図を使用することができます
a = sns.factorplot(data = df_melt,
x = 'cls',
y = 'value',
kind = 'box', # type of plot
col = 'columns',
col_order = ['sensitivity', # custom order of boxplots
'specificity',
'accuracy',
'ppv',
'auc']).set_titles('{col_name}') # remove 'column = ' part of title
plt.show()
。
b = sns.boxplot(data = df_melt,
hue = 'cls', # different colors for different 'cls'
x = 'columns',
y = 'value',
order = ['sensitivity', # custom order of boxplots
'specificity',
'accuracy',
'ppv',
'auc'])
sns.plt.title('Boxplot grouped by cls') # You can change the title here
plt.show()
これはあなたに1つの図の代わりに、サブプロットで同じプロットが、すべてを提供します。また、図のタイトルを1行で変更することもできます。残念ながら、私は '列'のサブタイトルを削除する方法を見つけることができませんが、うまくいけば、これはあなたが必要なものを得るでしょう。そう
a1 = sns.factorplot(data = df_melt,
x = 'value',
y = 'cls',
kind = 'box', # type of plot
row = 'columns',
row_order = ['sensitivity', # custom order of boxplots
'specificity',
'accuracy',
'ppv',
'auc']).set_titles('{row_name}') # remove 'column = ' part of title
plt.show()
のように、 Factorplot スワップあなたの
x
と
y
値を
row = 'columns'
に
col = 'columns'
を変更、
row_order = [...]
に
col_order = [...]
を変更し、
'{row_name}'
に
'{col_name}'
を変更:横にプロットを表示するには
EDIT
Boxplotあなたのx
とy
値はそのように
b1 = sns.boxplot(data = df_melt,
hue = 'cls',
x = 'value',
y = 'columns',
order = ['sensitivity', # custom order of boxplots
'specificity',
'accuracy',
'ppv',
'auc'],
orient = 'h')
sns.plt.title('Boxplot grouped by cls')
plt.show()
おかげのようなパラメータ
orient = 'h'
を追加スワップ!プロットを縦に表示し、横に表示しない方法はありますか? 1X5のプロットの代わりに、私は転置し、 'factorplot'を使って5X1のプロットを取得する必要がありますか? –はい!私の編集内容を見てください。 –