python - 如何创建显示均值、中值和模式的海底小提琴图?
问题描述
有没有办法为 violinplot 添加均值和模式?我的一个列中有分类数据,下一列中有相应的值。我尝试研究 matplotlib 小提琴图,因为它在技术上提供了我正在寻找的功能,但它不允许我在 x 轴上指定分类变量,这在我查看每个类别的数据分布时至关重要。我添加了一个小表格来说明数据的形状。
plt.figure(figsize=10,15)
ax=sns.violinplot(x='category',y='value',data=df)
解决方案
首先我们计算众数和均值:
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=
参数删除了内部箱线图,以便我们可以看到模式和含义:
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)
推荐阅读
- tls1.2 - pure-ftp TLS:抱歉,此服务器不接受明文会话
- mysql - DateTime 值的 phpMyAdmin 外键未按预期工作
- isabelle - 限制 Isabelle 中关系的域
- deep-learning - 为什么 GoogLeNet 重新训练的模型大小比其他模型小?
- java - 从 .mod 文件中获取 LP,使用 GLPK 解决它并以可用的形式获取输出
- reactjs - 使用 React 时如何修复 400 bad request 错误?
- python - 试图连接 keras 中具有相同形状的两层,从而导致形状匹配错误
- c++ - 初始化向量,然后将所有值复制到地图中
- matlab - 为什么我的程序返回不准确的结果?
- java - 将 3rd 方应用程序战争部署为 Spring Boot 应用程序