【问题标题】:How to get rid of artefacts in contourplot contourf (smoothing matrix/ 2D array)?如何摆脱contourplot contourf(平滑矩阵/二维数组)中的伪影?
【发布时间】: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


【解决方案1】:

很遗憾,我的回答令人误解。我有 2d 数据,想通过插值给定数据来摆脱盒子外观。为此,我在 Interpolation methods on different kinds of data 的线程中找到了 Andras Deak 的一个非常好的答案。使用matplotlib.contourf 完成绘图我得到了这个:

标记必须更改,但结果很好。

【讨论】:

    猜你喜欢
    • 2020-03-24
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    相关资源
    最近更新 更多