python-3.x - 如何在python中绘制按类别分组的置信区间
解决方案
我想我会尝试用普通的箱线图来做。根据您想要的漂亮程度,您可以获得接近您想要的东西。我通常使用 seaborn,但它基于 matplotlib,所以如果你愿意,不应该做太多的改变来保持它的纯 mpl。
我模仿了你的数据集
import pandas as pd
import seaborn as sns
data = [['A','A','B','B','C','C'],
[1, 1.1, 0.7, 1.2, 0.8, 1.1],
[1.5, 1.4, 1.4, 1.7, 1.6, 1.4],
[1.8, 1.8, 2.1, 2.2, 2.4, 1.7]]
df = pd.DataFrame(data).T
df.columns = ["Group","Lower","Average","Upper"]
然后,我将列融合回行,并删除平均值。这留下了最大值和最小值。我不得不添加一个新列作为色调,以便单独绘制每组中的项目。
df = df.melt(id_vars=["Group"],value_vars=["Lower","Average","Upper"])
df = df[df["variable"] != "Average"]
df["hue"] = df.groupby(["Group","variable"]).cumcount()
如果您绘制一个将 whis 设置为 100 的框和胡须,那么它会为您提供最大值和最小值,平均值在中间(因为它只有两个数据点,它与您的平均值列相同)。
g = sns.boxplot(x='Group',
y='value',
hue="hue",
data=df,
whis=(0,100),
meanline=True,
showbox=False,
width=0.5)
g.get_legend().remove()
我找不到强制显示垂直线剩余部分的方法。缝隙是盒子所在的地方,但你可以隐藏它,尤其是现在它已经毫无意义了。无论如何,这是最终结果:
推荐阅读
- ios - swift tableview高度和单元格最后索引
- elasticsearch - 使用匹配短语查询后的 Elasticsearch 唯一文档
- ruby-on-rails - 重构讨厌的 Rails 控制器
- google-apps-script - GetRange 一个值(该值表示一个单元格地址)
- powerbi - 将度量添加到矩阵时过滤器停止工作
- docker - 文件在 docker 中,但出现 No such file or directory 错误
- java - 可以将 OctetSequenceJsonWebKey 转换为 EllipticCurveJsonWebKey
- python - df.hist() 没有返回所需大小的图
- c++ - 尝试使用 C++ 在 SQL Server 中创建新表时出错
- python - 图像的 Selenium get_attribute('src') 返回 Base64 而不是 url