matplotlib 黑色和白色箱形图在Seaborn

nkcskrwz  于 2023-11-22  发布在  其他
关注(0)|答案(2)|浏览(115)

我正在尝试使用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()

字符串
它会产生类似于:


的数据
我想框轮廓是黑色的,没有任何填充或调色板的变化。

jtjikinw

jtjikinw1#

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

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns

_to_plot = pd.DataFrame(
    {
     0: np.random.normal(0, 1, 100),
     1: np.random.normal(0, 2, 100),
     2: np.random.normal(-1, 1, 100),
     3: np.random.normal(-2, 2, 100)
     }
).melt()

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

fig, ax = plt.subplots(figsize=(10, 10))
sns.boxplot(x='variable',y='value',
            data=_to_plot,
            showfliers=False,
            linewidth=1,
            ax=ax,
            **PROPS)

字符串


的数据

zour9fqk

zour9fqk2#

你必须设置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


的数据
如果您还需要设置传单的颜色,请遵循此answer

相关问题