如何创建均值,中位数和众数显示的海洋小提琴图?

问题描述 投票:0回答:1

是否有一种方法可以在小提琴图上添加均值和众数?我在其中一列中有分类数据,在下一列中有相应的值。我尝试研究matplotlib小提琴图,因为它从技术上讲提供了我要寻找的功能,但不允许我在x轴上指定类别变量,这对我查看每个类别的数据分布至关重要。我添加了一个小表来说明数据的形状。

plt.figure(figsize=10,15)
ax=sns.violinplot(x='category',y='value',data=df) 

enter image description here

mean mode violin-plot
1个回答
0
投票

首先我们计算模式并表示:

import seaborn as sns
import pandas as pd
from matplotlib import pyplot as plt

df = pd.DataFrame({'Category':[1,2,5,1,2,4,3,4,2],
                   'Value':[1.5,1.2,2.2,2.6,2.3,2.7,5,3,0]})

Means = df.groupby('Category')['Value'].mean()
Modes = df.groupby('Category')['Value'].agg(lambda x: pd.Series.mode(x)[0])

您可以使用seaborn进行基本绘图,下面我使用inner=参数删除内部boxplot,以便我们可以看到模式和含义:

fig, ax = plt.subplots()
sns.violinplot(x='Category',y='Value',data=df,inner=None)
plt.setp(ax.collections, alpha=.3)
plt.scatter(x=range(len(Means)),y=Means,c="k")
plt.scatter(x=range(len(Modes)),y=Modes)

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.