我正在尝试制作三维数据的2D地图。由于我想投影的z轴的数量和2D中的颜色代码非常小,并且峰值非常重要,所以我决定以对数比例显示它们。我写过这段代码,但首先,它没有正确显示等高线图,其次,颜色条缩小到顶部,而每种颜色的数字都在预期的位置。
我也想要充分平滑x-y平面,但是使用gaussian_filter它们都会缩小。
ny, nx = 100, 100
nstep=8
loglvl=np.logspace(np.log10(0.0000001),np.log10(max(zp)),nstep)
bins_x=np.linspace(min(xp),max(xp),nx)
bins_y=np.linspace(min(yp),max(yp),ny)
H, xedges, yedges = np.histogram2d(xp, yp, (bins_x,bins_y),weights=zp)
smooth=0.05
Hsmooth = scipy.ndimage.filters.gaussian_filter(H.T, smooth)
xcenters = (xedges[1:] + xedges[:-1])/2.
ycenters = (yedges[1:] + yedges[:-1])/2.
Ygrid, Xgrid = np.meshgrid(ycenters, xcenters)
extent = [xedges[0], xedges[-1], yedges[0], yedges[-1] ]
plt.contourf(Xgrid,Ygrid,Hsmooth,levels=loglvl,extent=extent)
plt.colorbar()
plt.show()
我的数据示例:
xp yp zp
7781.36 44.40 0.00000
6776.45 37.61 0.00000
3913.00 37.88 0.00000
3884.64 34.13 0.00000
3174.49 32.75 0.00372
4396.89 27.54 0.03209
3742.59 31.88 0.00287
2590.11 22.88 0.00000
1930.72 25.95 0.00000
4979.53 25.87 0.00156
3023.91 21.71 0.00340
3411.53 23.02 0.00000
6606.04 21.12 0.00026
4420.83 20.72 0.00000
3847.91 20.67 0.00008
2911.36 19.28 0.00000
5179.67 19.14 0.00000
3085.58 19.02 0.00000
4150.57 18.82 0.00000
1417.97 19.03 0.00000
7948.60 16.02 0.01354
4560.82 14.73 0.00000
4407.12 15.79 0.00021
4767.00 13.68 0.00000
4665.62 13.58 0.00000
3195.62 14.71 0.01170
3866.52 25.97 0.00000
3448.50 13.31 0.00010
7473.90 10.73 0.00474
4548.85 10.82 0.00086
1563.84 11.19 0.00006
4171.65 10.52 0.00002
2617.41 10.08 0.00211
2200.51 10.28 0.00062
1295.38 10.38 0.00811
3172.31 9.75 0.00200
4913.99 8.32 0.00037
6435.21 8.40 0.00673
3611.03 10.31 0.00000
3795.64 48.01 0.00000
5170.69 32.81 0.00000
2256.22 22.38 0.00000
4703.77 17.78 0.00059
2845.35 10.12 0.00028
3275.11 28.39 0.03358
4830.32 26.12 0.00000
7653.76 13.43 0.00003
3419.52 13.26 0.00000
2174.30 13.29 0.00016
7118.04 19.40 0.00821
由于某些zp数为零,因此也存在使用LogNorm for contourf的问题。
在我的数据中,有些区域已被屏蔽,并且没有任何点,所以我也希望这些区域已经充分显示在地图中。
我怎么能让我的代码工作?