调整 seaborn.boxplot

Tweaking seaborn.boxplot

我想比较一组分数分布 (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")

我对这个情节有一些问题:

编辑:

这是一个带有对数刻度 y 轴的示例 - 也不是很理想。为什么有些盒子在低端似乎被切断了?

离群值显示

您应该能够将任何参数传递给 seaborn.boxplot,您可以传递给 plt.boxplot(请参阅 documentation), so you could adjust the display of the outliers by setting flierprops. Here 是您可以对异常值执行的操作的一些示例。

如果你不想显示它们,你可以这样做

seaborn.boxplot(x="centrality", y="score", hue="model", data=data,
                showfliers=False)

或者你可以像这样把它们变成浅灰色:

flierprops = dict(markerfacecolor='0.75', markersize=5,
              linestyle='none')
seaborn.boxplot(x="centrality", y="score", hue="model", data=data,
                flierprops=flierprops)

分组顺序

您可以使用 hue_order 手动设置组的顺序,例如

seaborn.boxplot(x="centrality", y="score", hue="model", data=data,
                hue_order=["original", "Havel..","etc"])

y 轴缩放

您可以只获取所有 y 值的最小值和最大值并相应地设置 y_lim 吗?像这样:

y_values = data["scores"].values
seaborn.boxplot(x="centrality", y="score", hue="model", data=data,
                y_lim=(np.min(y_values),np.max(y_values)))

编辑:最后一点没有意义,因为自动 y_lim 范围已经包含所有值,但我将其作为如何调整这些设置的示例。如评论中所述,对数缩放可能更有意义。

这个答案 activity 已经有一段时间了,但我会回答 OP 关于未来需要帮助的人看起来很奇怪的下限的问题。

一旦将 y 轴设置为对数刻度,就不可能表示 y=0,因为 log(0) 趋于 -inf。

因此,当您的箱线图下部的值为零或非常接近它时,箱子的外观看起来像是 'cut in half'。

不用说,用对数刻度表示负 y 值也是不可能的。