在Seaborn的黑白boxplots

时间:2017-04-16 05:26:09

标签: python matplotlib seaborn

我正在尝试使用Python的Seaborn软件包绘制多个黑白盒子图。默认情况下,绘图使用调色板。我想用纯黑色轮廓绘制它们。我能想到的最好的是:

# figure styles
sns.set_style('white')
sns.set_context('paper', font_scale=2)
plt.figure(figsize=(3, 5))
sns.set_style('ticks', {'axes.edgecolor': '0',  
                        'xtick.color': '0',
                        'ytick.color': '0'})

ax = sns.boxplot(x="test1", y="test2", data=dataset, color='white', width=.5)
sns.despine(offset=5, trim=True)
sns.plt.show()

产生类似的东西:

enter image description here

我希望盒子的轮廓是黑色的,没有任何填充或调色板的变化。

2 个答案:

答案 0 :(得分:7)

你必须设置每个方框的edgecolor和使用set_color六个与每个方框相关的线(胡须和中位数):

ax = sns.boxplot(x="day", y="total_bill", data=tips, color='white', width=.5, fliersize=0)

# iterate over boxes
for i,box in enumerate(ax.artists):
    box.set_edgecolor('black')
    box.set_facecolor('white')

    # iterate over whiskers and median lines
    for j in range(6*i,6*(i+1)):
         ax.lines[j].set_color('black')

如果最后一个周期适用于所有艺术家和行,则可以缩小为:

plt.setp(ax.artists, edgecolor = 'k', facecolor='w')
plt.setp(ax.lines, color='k')

ax根据boxplot

enter image description here

如果您还需要设置传单颜色,请按照此answer

答案 1 :(得分:6)

我只是在探索这个,现在似乎有另一种方法可以做到这一点。基本上,有关键字 boxpropsmedianpropswhiskerprops 和(你猜对了)capprops,所有这些都是可以传递给 boxplot 函数的字典。我选择在上面定义它们,然后将它们解压以提高可读性:

PROPS = {
    'boxprops':{'facecolor':'none', 'edgecolor':'red'},
    'medianprops':{'color':'green'},
    'whiskerprops':{'color':'blue'},
    'capprops':{'color':'yellow'}
}

sns.boxplot(x='variable',y='value',
            data=_to_plot,
            showfliers=False,
            linewidth=0.75, 
            **PROPS)

enter image description here