1

在箱线图上绘制群体图(seaborn)时,这些点可能会覆盖箱线图的中线。我怎样才能使群体图点更透明一点,以便我也看到箱形图的中位数?

在图中我们看不到中线,因为它被点覆盖,所以,从光学上我不知道第二个盒子上的中线在哪里。是否可以使群体图的点更加透明,以便我也看到中线?

例子:

fig, axes = plt.subplots(nrows=1, ncols=1,figsize=(6,2))
data = pd.DataFrame({'a':[3,3,3,3,4,5,6,8,11,11,8,7,7,7,7,7,7,3,3,3,3,3,7,7,7,7,7,7,7,7,7,7,7,8,9,10,11,12,11,11,11]})
sns.boxplot(x='a',data=data, ax = axes)
ax = sns.swarmplot(x='a', data=data, color = 'grey', ax = axes)

(制作更大的数字不是一种选择)

在此处输入图像描述

4

1 回答 1

1

我直接想到了两个选择:

  • 使 swarmplot 半透明。这可以通过添加alpha参数来完成,例如alpha=0.5半透明。当然,背景中的条越暗,点就越不明显(因此我在这里将其设为黄色)。

    import matplotlib.pyplot as plt
    import seaborn as sns
    import pandas as pd
    
    fig, axes = plt.subplots(figsize=(6,2))
    data = pd.DataFrame({'a':[3,3,3,3,4,5,6,8,11,11,8,7,7,7,7,7,7,3,3,
                              3,3,3,7,7,7,7,7,7,7,7,7,7,7,8,9,10,11,12,11,11,11]})
    
    sns.boxplot(x='a',data=data, ax = axes, color="gold")
    sns.swarmplot(x='a', data=data, color = 'grey', ax = axes, alpha=0.5)
    
    plt.show()
    

    在此处输入图像描述

  • 在 swarmplot 点的顶部显示中线。这可以zorder通过通过medianprops关键字参数传递的字典指定中线来完成。

    sns.boxplot(x='a',data=data, ax = axes, color="gold", medianprops={"zorder":3})
    

    在此处输入图像描述
    在这种情况下,使中线半透明过孔medianprops={"zorder":3, "alpha":0.6}同样是可能的。

当然,这两个选项的任何组合也可以提供帮助。

于 2017-10-01T14:25:05.883 回答