如何在Seaborn中更改箱形图线的颜色

时间:2020-05-12 14:48:56

标签: python matplotlib plot data-visualization seaborn

更一般地说,如何更改海洋箱图中箱属性的子集的颜色值。是中值,晶须等。我对如何更改中间值特别感兴趣,因为我必须创建具有深色且无法看到中间线的图。

下面是一些示例代码:

import matplotlib.pyplot as plt
import seaborn as sns

fig, ax1 = plt.subplots(figsize=(15,5)

colours = ["#000184", "#834177"]
sns.set_palette(sns.color_palette(colours))
tips = sns.load_dataset("tips")
sns.boxplot(x="day", y="total_bill", hue="smoker", data=tips, ax=ax1)

哪个创建了:

enter image description here

可以看出,很难看到此处的蓝色中间线。

注意-我不想更改整个箱形图的颜色,而只是更改线条的一部分(在本例中为中位数)。另外-需要为特定组(在这种情况下为Yes吸烟者)进行更改,因为颜色可能不适用于两个组。

2 个答案:

答案 0 :(得分:2)

ax1.get_lines()给出由Line2D创建的所有boxplot对象的列表。每个组成一个框的元素将有一个Line2D对象:4个晶须(2条垂直线和2条水平线),1个中位数和1个异常值(这是{{ 1}},其中显示没有连接线的标记)。如果Line2D还会有showmeans=True,带有用于平均值的标记。因此,在这种情况下,每个盒子有7 Line2D个,在这种情况下为6。

请注意,箱线图还接受参数Line2D,该参数显示中位数附近的置信区间。在当前图的情况下,大多数置信区间都大于四分位数,四分位数会产生一些翻转的陷波。根据您的实际应用,此类缺口可以帮助突出中位数。

notch=True

example plot

答案 1 :(得分:2)

可以自定义箱线图中的所有艺术家,如here 所示。由于 sns.boxplot() 将所有 **kwargs 转发到 plt.boxplot(),因此以下有效:

tips = sns.load_dataset("tips")
colours = ["#000184", "#834177"]
sns.boxplot(x="day", y="total_bill", hue="smoker",
            data=tips, palette=colours,
            medianprops=dict(color="red", alpha=0.7),
            flierprops=dict(markerfacecolor="#707070", marker="d"))

Resulting figure

通过这种方式,您可以修改盒子的美感、“传单”(代表异常值的点)、中线或平均线,以及胡须/帽子。有关可修改属性的完整列表,请参阅 plt.boxplot() 的文档。

不幸的是,上述方法无法按照 OP 的要求调整每个类别的属性。但是使用透明颜色(例如 alpha=0.4)仍然可以产生非常令人满意的结果。

注意:如果 seaborn 以结构化的方式公开有关艺术家的信息以进行此类修改,那就太好了。虽然当前版本 (seaborn v0.11) 无法做到这一点,但 seaborn 的作者正在考虑在未来添加此功能,例如参见 here