如何在Seaborn箱线图中扩大箱体宽度?

7

我正在尝试使用Seaborn(参考链接)制作分组箱形图,但是箱子都非常窄 - 太窄了,以至于看不到分组颜色。

g = seaborn.factorplot("project_code",y="num_mutations",hue="organ",
        data=grouped_donor, kind="box", aspect=3)

enter image description here

如果我放大或拉伸图形到屏幕宽度的几倍,我可以看到方框,但这显然不是一个有用的标准图形。

这似乎与我的数据量有关;如果我只绘制前500个点(共6000个),我会得到可见但较小的方框。这可能特别是由于我的数据高方差的原因;根据matplotlib boxplot文档,

默认[width]为0.5,或者如果小于极值位置之间的距离,则为0.15x。

无论原因如何,在图形本身上还有足够的空间来扩大方框,如果我能够扩大它们。

不幸的是,控制箱体宽度的boxplot关键字“widths”不是有效的factorplot关键字,而且我找不到一个可以在绘图函数之外更改条形或箱体宽度的matplotlib函数。我甚至找不到任何人讨论这个问题;我找到的最接近的是boxplot线宽度。有什么建议吗?


你能提供你所看到的图表链接吗?Seaborn箱线图占据了尽可能多的水平空间,所以我不确定问题可能是什么。 - mwaskom
如果您无法分享实际数据,请尝试共享一些生成随机数据以重现问题的代码;这样做也可能让您了解问题所在。 - mwaskom
2
看起来色调级别完美地嵌套在x变量中,我认为这就是你的问题。只需删除 hue="organ" 即可。 - mwaskom
1
你说得对,去掉hue="organ"后所有的框都扩展到了可用宽度!这是否意味着无法使用factorplot按器官对我的项目进行颜色编码? - Lanthala
1
palette = df["organ"].map(pal_dict) 这个代码片段中,pal_dict 的 key 是器官,value 是颜色。通过映射得到的结果可以生成调色板。 - mwaskom
显示剩余7条评论
2个回答

4

当使用sns.boxplot时,版本0.9以后加上dodge=False可以解决这个问题。

sns.factorplot()自版本0.9已被弃用,并已被catplot()替代,后者也具有dodge参数。


2

为了以后参考,这里是制作带图例的正确图形的相关代码部分:(显然这些代码缺少重要部分,并且不能直接运行,但希望它能展示出一些棘手的部分)

import matplotlib.pylab as pyp
import seaborn as sns

def custom_legend(colors,labels, legend_location = 'upper left', legend_boundary = (1,1)):
    # Create custom legend for colors
    recs = []
    for i in range(0,len(colors)):
        recs.append(mpatches.Rectangle((0,0),1,1,fc=colors[i]))
    pyp.legend(recs,labels,loc=legend_location, bbox_to_anchor=legend_boundary)

# Color boxplots by organ
organ_list = sorted(df_unique(grouped_samples,'type'))
colors = sns.color_palette("Paired", len(organ_list))
color_dict = dict(zip(organ_list, colors))
organ_palette = grouped_samples.drop_duplicates('id')['type'].map(color_dict)

# Plot grouped boxplot
g = sns.factorplot("id","num_mutations",data=grouped_samples, order=id_list, kind="box", size=7, aspect=3, palette=organ_palette)
sns.despine(left=True)
plot_setup_pre()
pyp.yscale('log')
custom_legend(colors,organ_list)    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接