从Pandas Groupby Dataframe创建等高线图 [英] Create Contour Plot from Pandas Groupby Dataframe
问题描述
我有以下熊猫数据框:
In [66]:hdf.size()
pre>
Out [66 ]:
ab
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
长度:4572,dtype:int64
你看,a从0到188和b在每个组中从某个值到某个值。并且作为指定的Z值,该对的出现次数为a / b。
如何从分组数据框中获得一个计数或热图图? / p>
我有这个(要求?):
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)
如何从Groupby对象中获取x和y值并绘制轮廓?
解决方案谢谢很多!我的错误是,我没有意识到,我必须使用
.size()
这样的数据框应用一些函数来处理它...... p>
hdf = aggdf.groupby(['a','b'])。size()
hdf
给我
ab
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
长度:8844,dtype:int64
,和你的帮助CT朱,然后我可以做
hdfreset = hdf.reset_index()
hdfreset.columns = ['a','b','occurrence']
hdfpivot = hdfreset.pivot('a','b')
,这最终给了我正确的值
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);
这导致了这个美丽的轮廓:
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:
这篇关于从Pandas Groupby Dataframe创建等高线图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!