如何在Seaborn boxplot中加宽盒子?

时间:2015-06-26 00:30:51

标签: matplotlib graph boxplot seaborn

我试图使用Seaborn(Reference)制作一个分组的盒子图,并且盒子都非常窄 - 太窄而无法看到分组颜色。

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文档,

  

默认[宽度]为0.5或0.15x(极限位置之间的距离),如果它更小。

无论是什么原因,如果我可以加宽它们,那么图表本身就有足够的空间用于更宽的盒子。

不幸的是,控制框宽度的boxplot关键字widths不是有效factorplot关键字,我找不到更改宽度的matplotlib函数绘图功能本身之外的条形图或框形图。我甚至找不到任何人讨论这件事;我找到的最接近的是boxplot线宽。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

为了将来参考,以下是使用图例制作正确图形的相关代码位:(显然这是缺少重要的东西,实际上不会按原样运行,但希望它显示了棘手的部分)

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)    

答案 1 :(得分:0)

使用sns.boxplot时,添加dodge=False将解决版本0.9以上的问题。

sns.factorplot()从0.9版开始已被弃用,并已被catplot()取代,后者也具有dodge参数。