Seaborn - 压缩零计数类别的小提琴图

5

是否有一种简单的方法,在布局小提琴图时忽略计数为零的类别。在下面的示例中,没有“是:红色”和“否:绿色”的情况,但小提琴图仍然绘制了“缺失”的类别。我可以理解这应该是默认行为的原因,但是否有一种改变色调中使用的因素以抑制此行为并去除空白的方式?

df = pd.DataFrame(
    {'Success': 50 * ['Yes'] + 50 * ['No'], 
     'Category': 25 * ['Green'] + 25 * ['Blue'] + 25 * ['Green'] + 25 * ['Red'],
     'value': np.random.randint(1, 25, 100)}
)
sns.violinplot(x='Success', y='value', hue='Category', data=df)
plt.show()

这里输入图片描述

提前致谢。


你可以使用 hue_order 来欺骗。将绿色设置为中间类别,但这并不能解决没有数据的类别仍然被绘制的根本问题。 - error
你最终解决了这个问题吗?谢谢 - 或许可以使用类似于“order”参数来仅绘制出现次数高于某个阈值的分类变量?请参见https://stackoverflow.com/questions/47408527/seaborn-countplot-display-only-n-most-frequent-categories - tsando
1个回答

1
这是我能做到的最接近的,没有像我在评论中建议的那样针对特定情况的作弊行为。
您可以使用 sharex=False 参数的 FacetGrid。然后需要使用 map 方法,并将 violinplot 与适当的参数映射到 FacetGird 对象上。就像这样:
g = sns.FacetGrid(df, col="Success",  sharex=False)
g = g.map(sns.violinplot, 'Category','value')
plt.show()

导致这张图片的产生:

enter image description here

没有更多的空白区域,只有绘制了空地的地块。
唯一的缺点是目前色调参数不起作用。我将继续寻找包含正确方式的色调解决方案。用户仍然可以在x轴上看到实际类别。然而,这并不理想。
我仍然希望当前形式的答案能够帮助您。

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