Seaborn 小提琴图未正确显示
Seaborn violinplots not showing correctly
我正在使用 Seaborn violinplot()
和 swarmplot()
来显示来自 Dataframe 的数据。 Swarmplot 工作正常,而我在使用 violinplot
.
时遇到问题
我在循环中绘制了所有情节,其中大部分都按预期显示,但少数人物没有相应的小提琴。这也会在没有相同数据部分的循环的情况下发生。
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, x='source', y='CDS', order=["dairy","DTU","nature"], color=("white"), edgecolor="black", linewidth=0.7)
plt.show()
plt.clf()
错误的小提琴情节
正确:
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, x='source', y='CDS', order=["dairy", "DTU", "nature"],
color=("white"), edgecolor="black", linewidth=0.7, ax=ax)
左边的图像是生成的图,右边的图像放大到一个非常有限的 y-region 集中在 'CTU' 小提琴图上。
我正在使用 Seaborn violinplot()
和 swarmplot()
来显示来自 Dataframe 的数据。 Swarmplot 工作正常,而我在使用 violinplot
.
我在循环中绘制了所有情节,其中大部分都按预期显示,但少数人物没有相应的小提琴。这也会在没有相同数据部分的循环的情况下发生。
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, x='source', y='CDS', order=["dairy","DTU","nature"], color=("white"), edgecolor="black", linewidth=0.7)
plt.show()
plt.clf()
错误的小提琴情节
正确:
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, x='source', y='CDS', order=["dairy", "DTU", "nature"],
color=("white"), edgecolor="black", linewidth=0.7, ax=ax)
左边的图像是生成的图,右边的图像放大到一个非常有限的 y-region 集中在 'CTU' 小提琴图上。