Seaborn列式小提琴图

时间:2020-07-06 08:35:39

标签: python pandas dataframe plot seaborn

我有一个字典d,其中列出了数字的出现情况:

{'item1': [42, 1, 2, 3, 42, 2, 1, 1, 1, 1, 1],
 'item2': [2, 5],
 'item3': [5, 1, 7, 2, 7, 1, 42, 2, 9]}

然后我将其转换为统计这些事件的DataFrame:

df = pd.DataFrame.from_dict({k: dict(Counter(v)) for k, v in d.items()})

    item1  item2  item3
42    2.0    NaN    1.0
1     6.0    NaN    2.0
2     2.0    1.0    2.0
3     1.0    NaN    NaN
5     NaN    1.0    1.0
7     NaN    NaN    2.0
9     NaN    NaN    1.0

如何绘制使用seaborn.violinplotd派生的此数据帧或其他数据帧,以便数据帧中的每一列都基于每列值提供的数据在图中表示小提琴以及它们各自的索引?

我尝试了多种组合,我认为这在直观上是最接近的,但不幸的是仍然失败:

sns.violinplot(x=df.keys(), y=df.index, data=df)

3 个答案:

答案 0 :(得分:2)

DataFrame传递到seaborn.violinplot,以便分别绘制每个系列(列):

sns.violinplot(data=df)

pic

答案 1 :(得分:2)

仅此而已

from collections import Counter
d = {'item1': [42, 1, 2, 3, 42, 2, 1, 1, 1, 1, 1],
     'item2': [2, 5],
     'item3': [5, 1, 7, 2, 7, 1, 42, 2, 9]}
df = pd.DataFrame.from_dict({k: dict(Counter(v)) for k, v in d.items()})

sns.violinplot(data=df)

enter image description here

答案 2 :(得分:2)

下面的代码创建了情节:

# Import libraries
import pandas as pd
import collections
import seaborn as sns

# Create dictionary
d = {'item1': [42, 1, 2, 3, 42, 2, 1, 1, 1, 1, 1],
 'item2': [2, 5],
 'item3': [5, 1, 7, 2, 7, 1, 42, 2, 9]}

# Create DataFrame and melt
df = pd.DataFrame.from_dict({k: dict(collections.Counter(v)) for k, v in d.items()})
df = df.melt()

# Plot
sns.violinplot(x="variable", y="value", data=df)

enter image description here