调整 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")
我对这个情节有一些问题:
- 有大量异常值,我不喜欢这里的绘制方式。我可以删除它们吗?我可以更改外观以减少混乱吗?我可以至少给它们上色,使它们的颜色与盒子的颜色相匹配吗?
model
值 original
很特殊,因为所有其他分布都应与 original
的分布进行比较。这应该在图中直观地反映出来。我可以让 original
成为每组的第一个盒子吗?我可以以某种方式抵消或标记它吗?是否可以通过每个 original
分布的中值和框组绘制一条水平线?
score
的一些值很小,如何适当缩放y轴来显示它们?
编辑:
这是一个带有对数刻度 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 值也是不可能的。
我想比较一组分数分布 (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 轴的示例 - 也不是很理想。为什么有些盒子在低端似乎被切断了?
离群值显示
您应该能够将任何参数传递给 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 值也是不可能的。