Seaborn小提琴图未正确显示

问题描述

我正在使用Seaborn violinplot()swarmplot()显示数据框中的数据。当我在使用violinplot时遇到麻烦时,Swarmplot可以正常工作。

我会循环绘制所有图,其中大多数都按预期显示,但是有些数字没有相应的小提琴。对于相同的数据部分,如果没有循环,也会发生这种情况。

用于错误绘图的DataFrame。

非常感谢您的宝贵时间!

    CDS source
0   3158    nature
1   2879    DTU
2   2881    DTU
3   3103    dairy
4   2992    nature
5   3127    dairy
6   3127    nature
7   2879    dairy
8   3116    nature
9   3091    nature
10  3014    dairy
11  3003    nature
12  2951    dairy
13  3161    nature
14  2960    nature
15  2971    nature
16  3138    nature
17  3153    nature
18  2878    DTU
19  2882    DTU
20  2880    DTU
21  2880    DTU
22  2942    nature
23  3027    dairy
24  3021    dairy
25  3395    nature
26  3160    nature
27  2997    nature
28  3094    nature
29  2798    nature
30  3082    dairy
31  3061    nature
32  2912    nature
33  2952    nature
34  3154    nature
35  3158    nature
36  2980    dairy
37  3069    dairy
38  3080    nature
39  2880    DTU
40  3301    nature
41  3042    nature
42  3154    nature
43  3034    nature
44  2983    dairy
45  2981    nature
46  3049    nature
47  3090    dairy
48  2987    nature
49  2828    nature
50  2924    nature
51  3108    dairy
52  3128    nature
53  3030    nature
54  3120    nature
55  3176    nature
56  3185    nature
57  3205    nature
58  2987    nature
59  2900    nature
60  3247    nature
61  3144    nature
62  3092    nature
63  2944    dairy
64  3284    nature
65  2947    nature
66  3185    dairy
67  2715    dairy
68  2924    nature
69  2929    nature
70  2961    nature
71  3172    nature
72  3161    nature
73  3200    nature
74  2913    nature
75  3157    nature
76  2965    nature
77  2940    nature
78  3104    dairy
79  3015    dairy
80  3022    dairy
81  3119    nature
82  3189    dairy
83  3179    nature

代码

for species in listofspecies:
    dfplot = df[df['species'].isin([species])]
    ax = sns.violinplot(data = dfplot,x='source',y="CDS",order=["dairy","DTU","nature"],inner=None)
    ax = sns.swarmplot(data = dfplot,y='CDS',color=("white"),edgecolor="black",linewidth=0.7)    
    plt.show()
    plt.clf()

错误的小提琴图

Error violin plot

正确:

Correct violin plot

解决方法

source == 'DTU'的数据点很少;此外,它们的'CDS'值非常接近。小提琴的中央图最终以几乎为零的高度结束。

violinplot具有参数scale,其默认值为area。为了使所有区域相等,另外两个小提琴必须非常狭窄。设置scale='width'可使所有小提琴具有相等的宽度:

ax = sns.violinplot(data=dfplot,x='source',y="CDS",order=["dairy","DTU","nature"],inner=None,scale='width')
ax = sns.swarmplot(data=dfplot,y='CDS',color=("white"),edgecolor="black",linewidth=0.7,ax=ax)

左图是生成的图,右图放大到了非常有限的y区域,集中在“ CTU”小提琴图上。

example plot

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...