首页 > 解决方案 > 如何摆脱contourplot contourf(平滑矩阵/二维数组)中的伪影?

问题描述

我在带有命名数据集的 hdf5 文件中有数据

#Data Aquisition and manipulation
file = h5py.File('C:/Users/machz/Downloads/20200715_000_Scan_XY-Coordinate_NV-centre_APD.h5', 'r')
filename = path.basename(file.filename)

intensity = file.get('intensity')
intensity = np.array(intensity)

x_range = file.get('x range')
x_range = np.array(x_range)
x_range = np.round(x_range,1)

z_range = file.get('z range')
z_range = np.array(z_range)
z_range=np.round(z_range,1)

其中强度是二维数组,x_range 和 z_range 是一维数组。现在我想平滑强度数据。原始数据看起来像这样: seaborn_heatmap

通过使用seaborn.heatmap

heat_map = sb.heatmap(intensity, cmap="Spectral_r")

使用时matplotlib.contourf通过

plt.contourf(intensity, 1000, cmap="Spectral_r")

我得到以下结果:

在此处输入图像描述

尽管它旋转了 180 度,但看起来还不错。但是我怎样才能摆脱 x 和 y 方向的失真并获得圆点呢?有没有更优雅的方法来平滑二维数组/矩阵?- 我读过一些关于内核密度估计(KDE)的东西,但它看起来很复杂。


编辑:应用 ´´´intensity_smooth = gaussian_filter(intensity, sigma=1, order=0)```的结果: scipy.gaussian_filter

具有高强度的点正在溶解,但我想要在矩阵的两个值之间具有软过渡的尖锐强度最大值(见第一张图片)。

标签: numpymatplotlibmatrixheatmapsmoothing

解决方案


不幸的是,我的回答令人误解。我有 2d 数据,想通过插值给定数据来摆脱盒子外观。为此,我在不同类型数据的线程插值方法中找到了 Andras Deak 的一个非常好的答案。绘图是通过使用matplotlib.contourfI've got this 完成的: 在此处输入图像描述

必须更改刻度线,但结果很好。


推荐阅读