我想比较一组分数(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轴的示例 - 也不理想。为什么有些盒子似乎在低端切断?
答案 0 :(得分:35)
异常值显示
您应该能够将seaborn.boxplot
的任何参数传递给plt.boxplot
(参见documentation),这样您就可以通过设置{{1}来调整异常值的显示}}。 Here是您可以使用异常值进行操作的一些示例。
如果您不想显示它们,可以
flierprops
或者你可以将它们变成浅灰色:
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
缩放y轴
您可以获取所有y值的最小值和最大值,并相应地设置seaborn.boxplot(x="centrality", y="score", hue="model", data=data,
hue_order=["original", "Havel..","etc"])
?像这样:
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)))
范围已包含所有值,但我只是将其作为如何调整这些设置的示例。正如评论中所提到的,日志缩放可能更有意义。
答案 1 :(得分:1)
这个答案已经有一段时间没有活动了,但我会回答 OP 关于未来需要帮助的任何人的奇怪下界的问题。
一旦将 y 轴设置为对数刻度,就不可能表示 y=0,因为 log(0) 趋向于 -inf。
因此,当箱线图下部的值为零或非常接近于零时,箱体看起来像是被“切成两半”。
不用说,用对数刻度表示负 y 值也是不可能的。