【发布时间】:2016-05-09 23:29:38
【问题描述】:
我想比较一组分数分布 (score),按某些类别 (centrality) 分组并按其他类别 (model) 着色。我用 seaborn 尝试了以下方法:
plt.figure(figsize=(14,6))
seaborn.boxplot(x="centrality", y="score", hue="model", data=data, palette=seaborn.color_palette("husl", len(models) +1))
seaborn.despine(offset=10, trim=True)
plt.savefig("/home/i11/staudt/Eval/properties-replication-test.pdf", bbox_inches="tight")
这个情节我有一些问题:
- 存在大量异常值,我不喜欢这里的绘制方式。我可以删除它们吗?我可以更改外观以减少混乱吗?我可以至少给它们上色,使它们的颜色与盒子颜色相匹配吗?
-
model值original是特殊的,因为所有其他分布都应与original的分布进行比较。这应该在情节中直观地反映出来。我可以将original设为每个组的第一个盒子吗?我可以以某种方式抵消或标记它吗?是否可以通过每个original分布的中位数和一组框画一条水平线? -
score的某些值很小,如何适当缩放y轴来显示?
编辑:
这是一个带有对数刻度 y 轴的示例 - 还不是很理想。为什么有些盒子在低端似乎被切断了?
【问题讨论】:
-
蓝色异常值是 matplotlib 错误,可以通过更新 seaborn 来避免。但我当然不会只删除异常值!
-
你试过log-scaling y 变量吗?
-
@mwaskom 是的,但这会在图的顶部非常“压缩”较大值的条形。是否存在折衷方案,即仅对轴的一部分进行对数缩放?
-
有时这些组很难区分,例如如果盒子不接触。是否可以绘制分隔组的垂直线?
标签: python matplotlib plot boxplot seaborn