簡體   English   中英

Seaborn,每列一個數據的小提琴情節

[英]Seaborn, violin plot with one data per column

我想把這個小提琴情節http://seaborn.pydata.org/generated/seaborn.violinplot.html (第四個例子,帶有split = True)與這個http://seaborn.pydata.org/examples/elaborate_violinplot結合起來。 HTML

實際上,我有一個dataFrame,列Success (是或否)和幾個數據列。 例如 :

df = pd.DataFrame(
    {"Success": 50 * ["Yes"] + 50 * ["No"], 
     "A": np.random.randint(1, 7, 100), 
     "B": np.random.randint(1, 7, 100)}
)

    A  B Success
0   6  4     Yes
1   6  2     Yes
2   1  1     Yes
3   1  2     Yes
.. .. ..     ...
95  4  4      No
96  2  1      No
97  2  6      No
98  2  3      No
99  2  1      No

我想為每個數據列繪制一個小提琴圖。 它適用於:

import seaborn as sns
sns.violinplot(data=df[["A", "B"]], inner="quartile", bw=.15)

但現在,我想根據Success專欄拆分小提琴。 但是,使用hue="Success"我得到一個錯誤, Cannot use 'hue' without 'x' or 'y' 那么如何根據“成功”欄分割小提琴情節呢?

如果正確理解您的問題,您需要重塑數據幀以使其具有長格式:

df = pd.melt(df, value_vars=['A', 'B'], id_vars='Success')
sns.violinplot(x='variable', y='value', hue='Success', data=df)
plt.show()

在此輸入圖像描述

我能夠在DataFrame上調整一個小提琴圖的例子 ,如下所示:

df = pd.DataFrame({"Success": 50 * ["Yes"] + 50 * ["No"], 
                   "A": np.random.randint(1, 7, 100), 
                   "B": np.random.randint(1, 7, 100)})
sns.violinplot(df.A, df.B, df.Success, inner="quartile", split=True)
sns.plt.show()

Seaborn在Pandas DataFrame的小提琴圖表

顯然,它仍然需要一些工作:例如,A尺度的大小應該適合單個半小提琴。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM