I have following Pandas Dataframe:
In [66]: hdf.size()
Out[66]:
a b
0 0.0 21004
0.1 119903
0.2 186579
0.3 417349
0.4 202723
0.5 100906
0.6 56386
0.7 6080
0.8 3596
0.9 2391
1.0 1963
1.1 1730
1.2 1663
1.3 1614
1.4 1309
...
186 0.2 15
0.3 9
0.4 21
0.5 4
187 0.2 3
0.3 10
0.4 22
0.5 10
188 0.0 11
0.1 19
0.2 20
0.3 13
0.4 7
0.5 5
0.6 1
Length: 4572, dtype: int64
You see, a from 0...188 and b in every group from some value to some value. And as the designated Z-value, the count of the occurence of the pair a/b.
How to get a countour or heatmap plot out of the grouped dataframe?
I have this (asking for the ?):
numcols, numrows = 30, 30
xi = np.linspace(0, 200, numcols)
yi = np.linspace(0, 6, numrows)
xi, yi = np.meshgrid(xi, yi)
zi = griddata(?, ?, hdf.size().values, xi, yi)
How to get the x and y values out of the Groupby object and plot a contour?
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: