【发布时间】:2020-11-06 01:14:54
【问题描述】:
我在带有命名数据集的 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:
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)```的结果:
具有高强度的点正在溶解,但我想要在矩阵的两个值之间具有软过渡的尖锐强度最大值(参见第一张图片)。
【问题讨论】:
-
可以通过设置你的 ylim 来纠正翻转的 y 轴。 “失真”基于网格的粗糙度,但您可以通过降低轮廓级别和/或添加过滤器来消除其中的一些。高斯滤波器可能工作docs.scipy.org/doc/scipy/reference/generated/…
-
好的,感谢您提供有关轴的提示。应用
gaussian_filter时,我得到了平滑的相邻数据,但实际上我希望两个网格点之间的附加值能够从例如(x,y)=(17,14) 到 (18,14) 更柔和,并摆脱了看起来像盒子的盒子。 -
那么您应该尝试将数据插入到更精细的网格中。
标签: numpy matplotlib matrix heatmap smoothing