来自熊猫数据帧的不同长度序列值的箱线图

时间:2020-08-15 17:28:36

标签: python pandas numpy matplotlib boxplot

我有一个csv文件,如下所示:enter image description here

每列的值具有不同的长度。试图将其绘制为箱线图。

enter image description here

代码

import pandas as pd
data = pd.DataFrame()

df = pd.read_csv('/content/filename.csv', sep=';')
plt.figure(figsize=(12,8))

plt.plot()
plt.boxplot([df.dc_class0,df.dc_class1, df.dc_class3, df.dc_class2, df.dc_class4,            df.dc_class5, df.dc_class6, df.dc_class7, df.dc_class8, df.dc_class9, df.dc_class10,   df.dc_class11], 
        labels=['M0 '+str(round(df.dc_class0.mean(),1)),
                'M1 '+str(round(df.dc_class1.mean(),2)),
                'M2 '+str(round(df.dc_class2.mean(),3)), 
                'M3 '+str(round(df.dc_class3.mean(),4)), 
                'M4 ' +str(round(df.dc_class4.mean(),3)),
                'M5 ' +str(round(df.dc_class5.mean(),3)),
                'M6 ' +str(round(df.dc_class6.mean(),3)),
                'M7 ' +str(round(df.dc_class7.mean(),3)),
                'M8 ' +str(round(df.dc_class8.mean(),3)),
                'M9 ' +str(round(df.dc_class9.mean(),3)),
                'M10 ' +str(round(df.dc_class10.mean(),3)),
                'M11 ' +str(round(df.dc_class11.mean(),3)),

                ])

plt.ylim(0, 1)
plt.title('Dices des différentes classes')
plt.legend()
plt.show()

我没有得到第5、6、7和8列的图,这是问题所在,还有其他方法可以做到吗?

1 个答案:

答案 0 :(得分:1)

df.dc_class5df.dc_class6df.dc_class7df.dc_class8中缺少数据,这些数据仍然阻止箱形图显示在这些列中。调用.dropna()时,可以对NaN的每一列使用plt.boxplot方法。

我还认为您不小心切换了df.dc_class2和df.dc_class3。

plt.boxplot([
    df.dc_class0, df.dc_class1, df.dc_class2, 
    df.dc_class3, df.dc_class4, 
    df.dc_class5.dropna(), df.dc_class6.dropna(),
    df.dc_class7.dropna(), df.dc_class8.dropna(), 
    df.dc_class9, df.dc_class10, df.dc_class11
    ], 
        labels=[
            'M0 '+str(round(df.dc_class0.mean(),1)),
            'M1 '+str(round(df.dc_class1.mean(),2)),
            'M2 '+str(round(df.dc_class2.mean(),3)), 
            'M3 '+str(round(df.dc_class3.mean(),4)), 
            'M4 ' +str(round(df.dc_class4.mean(),3)),
            'M5 ' +str(round(df.dc_class5.mean(),3)),
            'M6 ' +str(round(df.dc_class6.mean(),3)),
            'M7 ' +str(round(df.dc_class7.mean(),3)),
            'M8 ' +str(round(df.dc_class8.mean(),3)),
            'M9 ' +str(round(df.dc_class9.mean(),3)),
            'M10 ' +str(round(df.dc_class10.mean(),3)),
            'M11 ' +str(round(df.dc_class11.mean(),3)),

        ]
    )