我建議使用seaborn
下面是一個例子,可以幫助你:
進口
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有一個叫做factorplot
極好的工具,創建其中行/ COLS與您的數據建立的次要情節的網格。爲了能夠做到這一點,我們需要將df
「融化」爲更有用的形狀。
df_melt = df.melt(id_vars = 'cls',
value_vars = ['accuracy',
'auc',
'ppv',
'sensitivity',
'specificity'],
var_name = 'columns')
現在我們可以使用col「columns」創建factorplot
。
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()
您也可以只使用Seaborn的箱線圖。
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()
這會給你同樣的情節,都在同一個人物,而不是次要情節。它還允許您用一行更改圖形的標題。不幸的是,我找不到一種方法來刪除'列'字幕,但希望這會得到你所需要的。
編輯
側身查看圖: Factorplot 交換你x
和y
值,改變col = 'columns'
到row = 'columns'
,改變col_order = [...]
到row_order = [...]
,並改變'{col_name}'
到'{row_name}'
像這樣
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()
Boxplot 更換您的x
和y
值然後添加參數orient = 'h'
像這樣
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()
的感謝!有沒有辦法垂直顯示圖而非水平?我不需要1X5的情節,而是需要轉置並用'factorplot'獲得5X1情節? –
是的!請參閱我的編輯。 –