Create Contour Plot from Pandas Groupby Dataframe

前端 未结 2 567
悲&欢浪女
悲&欢浪女 2021-02-02 01:23

I have following Pandas Dataframe:

In [66]: hdf.size()
Out[66]:
a           b
0           0.0          21004
            0.1         119903
            0.2               


        
相关标签:
2条回答
  • 2021-02-02 01:37

    Welcome to SO.

    It looks quite clear that for each of your 'a' level, the numbers of 'b' levels are not the same, thus I will suggest the following solution:

    In [44]:
    
    print df #an example, you can get your dataframe in to this by rest_index()
        a  b     value
    0   0  1  0.336885
    1   0  2  0.276750
    2   0  3  0.796488
    3   1  1  0.156050
    4   1  2  0.401942
    5   1  3  0.252651
    6   2  1  0.861911
    7   2  2  0.914803
    8   2  3  0.869331
    9   3  1  0.284757
    10  3  2  0.488330
    
    [11 rows x 3 columns]
    In [45]:
    #notice that you will have some 'NAN' values
    df=df.pivot('a', 'b', 'value')
    In [46]:
    
    X=df.columns.values
    Y=df.index.values
    Z=df.values
    x,y=np.meshgrid(X, Y)
    plt.contourf(x, y, Z) #the NAN will be plotted as white spaces
    Out[46]:
    <matplotlib.contour.QuadContourSet instance at 0x1081385a8>
    

    enter image description here

    0 讨论(0)
  • 2021-02-02 01:46

    Thanks a lot! My fault was, that I did not realize, that I have to apply some function to the groupby dataframe, like .size(), to work with it...

    hdf = aggdf.groupby(['a','b']).size()
    hdf
    

    gives me

    a           b
    1           -2.0          1
                -1.9          1
                -1.8          1
                -1.7          2
                -1.6          5
                -1.5         10
                -1.4          9
                -1.3         21
                -1.2         34
                -1.1         67
                -1.0         65
                -0.9         94
                -0.8        180
                -0.7        242
                -0.6        239
    ...
    187          0.4        22
                 0.5        10
    188         -0.6         2
                -0.5         2
                -0.4         1
                -0.3         2
                -0.2         5
                -0.1        10
                -0.0        18
                 0.1        19
                 0.2        20
                 0.3        13
                 0.4         7
                 0.5         5
                 0.6         1
    Length: 8844, dtype: int64
    

    With that, and your help CT Zhu, I could then do

    hdfreset = hdf.reset_index()
    hdfreset.columns = ['a', 'b', 'occurrence']
    hdfpivot=hdfreset.pivot('a', 'b')
    

    and this finally gave me the correct values to

    X=hdfpivot.columns.levels[1].values
    Y=hdfpivot.index.values
    Z=hdfpivot.values
    Xi,Yi = np.meshgrid(X, Y)
    plt.contourf(Yi, Xi, Z, alpha=0.7, cmap=plt.cm.jet);
    

    which leads to this beautiful contourf:

    enter image description here

    0 讨论(0)
提交回复
热议问题