Seaborn,每列一个数据的小提琴情节

时间:2017-01-10 16:11:25

标签: python seaborn

我想把这个小提琴情节http://seaborn.pydata.org/generated/seaborn.violinplot.html(第四个例子与split = True)和这个http://seaborn.pydata.org/examples/elaborate_violinplot.html结合起来。

实际上,我有一个带有Success列(是或否)的dataFrame和几个数据列。例如:

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'出错了。那么如何根据“成功”栏分割小提琴情节呢?

2 个答案:

答案 0 :(得分:14)

如果正确理解您的问题,您需要重塑数据帧以使其格式为长格式:

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

enter image description here

答案 1 :(得分:0)

我能够在DataFrame上调整example小提琴图,如下所示:

session_start();
if(isset($_GET['lang']))
  $_SESSION['lang'] = $_GET['lang']; //GET value from chosen lang

if(!isset($_SESSION['lang']))
  $_SESSION['lang'] = 'fr'; //default case

require_once 'lang/' . $_SESSION['lang'] . '-lang.php'; //include file dinamically

Seaborn violin graph over Pandas DataFrame

显然,它仍然需要一些工作:例如,A音阶的大小应该适合单个半小提琴。