Python 使用contourf以对数比例绘制贴图颜色(z轴颜色编码)?

Python 使用contourf以对数比例绘制贴图颜色(z轴颜色编码)?,python,matplotlib,scipy,Python,Matplotlib,Scipy,我正在尝试制作一张三维数据的二维地图。由于我想要在2D中投影的z轴数量和颜色代码非常小,并且峰值非常重要,所以我决定以对数比例显示它们。我已经编写了这段代码,但首先,它不能正确地显示等高线图,其次,当每种颜色的编号在其预期位置时,颜色条收缩到顶部。 我还想充分平滑x-y平面,但使用高斯滤波器,它们都缩小了 ny, nx = 100, 100 nstep=8 loglvl=np.logspace(np.log10(0.0000001),np.log10(max(zp)),nstep) bins_x

我正在尝试制作一张三维数据的二维地图。由于我想要在2D中投影的z轴数量和颜色代码非常小,并且峰值非常重要,所以我决定以对数比例显示它们。我已经编写了这段代码,但首先,它不能正确地显示等高线图,其次,当每种颜色的编号在其预期位置时,颜色条收缩到顶部。
我还想充分平滑x-y平面,但使用高斯滤波器,它们都缩小了

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数为零,因此也存在对轮廓函数使用对数范数的问题。 在我的数据中,有一些区域被屏蔽,没有任何点,因此我也希望这些区域在地图中得到充分显示。

我怎样才能让我的代码工作

您能否以一种易于复制/粘贴到解释器中的方式发布示例数据?@ali\m我如何在这里发布数据?是否可以将ascii文件附加到post?如果我是你,我将只粘贴值的代表性子集,并且我将包括对
np.array
的整个调用,例如
xp=np.array([7781.36,…,5179.61])
。为了便于阅读,可以跨行打断括号中的语句。如果你能提供一个拷贝/粘贴,你就有更好的机会得到你问题的好答案!您也可以使用或,但它是。