Seaborn 小提琴图显示不正确

我正在使用 Seabornviolinplot()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

代码:


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()

错误小提琴情节

https://img1.sycdn.imooc.com/652f8f80000110f203960261.jpg

正确的:

https://img1.sycdn.imooc.com/652f8f8c0001d4e503940260.jpg


幕布斯6054654
浏览 61回答 1
1回答

莫回无

很少有数据点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 区域,集中在“CTU”小提琴图上。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python