使用 griddata 绘制数据集而不取消异常值

尼古

我有一个 x, y, z 数据集,其中包含相当多的点。x 和 y 是位置,而 z 是这些坐标处的实际可观察​​值。

大多数坐标的 z 值为零,而只有少数坐标在 2D 地图中定义线(z 平滑变化)。

如果我用

scatter(x,y,c=z))

我只得到非常模糊的线条,因为颜色定义为 的散点与z=0z 的非零值重叠。如果我减小点的大小以减少重叠,我就看不到它们了。

这是我可以使用 scatter 获得的最佳示例(蓝色为零z,其他颜色为非零z)。

在此处输入图片说明

所以,我想改为使用

data = np.genfromtxt('data')

x=data[:,0]
y=data[:,1]*3.0
z=data[:,2]

grid_x, grid_y = np.mgrid[min(x):max(x):100, min(y):max(y):1000]

from scipy.interpolate import griddata
grid_z0 = griddata((x, y),z, (grid_x, grid_y), method='cubic')

im = imshow(grid_z0,origin="lower",extent=[0,0.175,-0.15,0.15]) # zoom in on specific part of data

以获得更密集的点网格,并且由于它们周围的点的三次插值,可能会获得更宽的线。

然而,似乎griddata是删除非零 z ,将它们视为轮廓线,从而隐藏任何可能的特征,整个网格绘制零z

是否有任何 python/matplotlib/... 功能或技巧,我想以一种很好的方式绘制它?

我正在尝试制作类似于您在 [ https://journals.aps.org/prb/abstract/10.1103/PhysRevB.93.085409 2 的图 2 (2) 中看到的图(您可以看到图而不下载论文)在线条周围可能有某种发光。

我使用的数据在这个保管箱链接中

存在的重要性欧内斯特

当然,您可以更改散射,例如将没有能量的点的大小设置为 0。

import matplotlib.pyplot as plt
import numpy as np
data = np.genfromtxt('data/some_solidstate_physics_data.txt')

x=data[:,0]; y=data[:,1]*3.0; z=data[:,2]

plt.scatter(x,y,c=z, s=np.log10(z+1), cmap="PuRd", vmin=-500)

plt.show()

在此处输入图片说明

由于数据已经网格化了,所以肯定不需要使用griddata,这样只会平滑数据。只需将数据重塑为网格就足够了。

import matplotlib.pyplot as plt
import numpy as np
data = np.genfromtxt('data/some_solidstate_physics_data.txt')

x=data[:,0]; y=data[:,1]*3.0; z=data[:,2]

ux = np.unique(x); uy = np.unique(y)
Z = z.reshape(len(ux),len(uy)).T

dx = np.diff(ux[:2])[0]; dy = np.diff(uy[:2])[0]
ext = [ux.min()-dx/2.,ux.max()+dx/2.,uy.min()-dy/2., uy.max()+dy/2.]

plt.imshow(Z, extent=ext, aspect="auto", cmap="magma")

plt.show()

在此处输入图片说明

由于网格非常密集,它看起来有点像素化。

当然,您也可以将数据分成更大的块。例如将 3x3 像素的数据合并为一个并取最大值,使用scipy.stats.binned_statistic_2d

import matplotlib.pyplot as plt
import numpy as np
from  scipy.stats import binned_statistic_2d
data = np.genfromtxt('data/some_solidstate_physics_data.txt')

x=data[:,0]; y=data[:,1]*3.0; z=data[:,2]

ux = np.unique(x); uy = np.unique(y)
h, ex, ey,_ = binned_statistic_2d(x, y, z, bins=[ux[::3],uy[::3]], statistic='max')

dx = np.diff(ex[:2])[0]; dy = np.diff(ey[:2])[0]
ext = [ux.min()-dx/2.,ux.max()+dx/2.,uy.min()-dy/2., uy.max()+dy/2.]

plt.imshow(h.T, extent=ext, aspect="auto", cmap="magma")

plt.show()

在此处输入图片说明


掌握这些技术后,您可能会决定以牺牲定量准确性为代价来美化您的结果。例如应用高斯滤波器,scipy.ndimage.filters.gaussian_filter以及interpolation="gaussian"在绘图中。

import matplotlib.pyplot as plt
import numpy as np
import scipy.ndimage.filters
data = np.genfromtxt('data/some_solidstate_physics_data.txt')

x=data[:,0]; y=data[:,1]*3.0; z=data[:,2]

ux = np.unique(x); uy = np.unique(y)
Z = z.reshape(len(ux),len(uy)).T
Z = scipy.ndimage.filters.gaussian_filter(Z, 3)

dx = np.diff(ux[:2])[0]; dy = np.diff(uy[:2])[0]
ext = [ux.min()-dx/2.,ux.max()+dx/2.,uy.min()-dy/2., uy.max()+dy/2.]

plt.imshow(Z, extent=ext, aspect="auto", cmap="magma", interpolation="gaussian")

plt.show()

在此处输入图片说明

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Scipy内插griddata方法重新栅格化数据时出现意外的内存错误

来自分类Dev

使用`scipy.interpolate.griddata`的插值非常慢

来自分类Dev

在PYTHON上使用griddata的未知插值方法数组

来自分类Dev

SWT Java-使用GridData和GridLayout绘画

来自分类Dev

SAPUi5使用情况网格和GridData

来自分类Dev

尝试使用DBSCAN绘制异常值

来自分类Dev

不使用scipy.interpolate.griddata插值pyplot中的NaN值

来自分类Dev

为什么使用method = nearest的一维scipy.interpolate.griddata会产生nans?

来自分类Dev

使用scipy.interpolate.griddata时如何设置插值点之间的最大距离?

来自分类Dev

加快SciPy Griddata功能

来自分类Dev

使用Numpy查找并打印数据的异常值

来自分类Dev

使用 lapply 修剪数据以去除异常值

来自分类Dev

Scipy的griddata方法总是失败

来自分类Dev

使用 Seaborn 绘制箱线图后如何删除异常值?

来自分类Dev

使用ELKI的异常值检测

来自分类Dev

如何通过使用熊猫进行转换来消除而不处理异常值?

来自分类Dev

循环创建变量以动态创建griddata()

来自分类Dev

使用JQPlot绘制大型数据集

来自分类Dev

使用相同的数据集绘制各种符号

来自分类Dev

如何使用Shiny绘制上传的数据集?

来自分类Dev

使用colorcode绘制Fisher的Iris数据集

来自分类Dev

使用R替换包含NA的数据框中多个列的异常值

来自分类Dev

使用rnorm连续创建数据,直到R中出现异常值

来自分类Dev

尝试使用R删除大型数据库中的潜在异常值。

来自分类Dev

如何使用百分位数过滤数据框以滤除异常值?

来自分类Dev

如何取消数据集堆叠(使用数据透视)?

来自分类Dev

使用z分数查找异常值

来自分类Dev

均值排除使用dplyr的异常值

来自分类Dev

使用numpy.argwhere移除异常值

Related 相关文章

  1. 1

    使用Scipy内插griddata方法重新栅格化数据时出现意外的内存错误

  2. 2

    使用`scipy.interpolate.griddata`的插值非常慢

  3. 3

    在PYTHON上使用griddata的未知插值方法数组

  4. 4

    SWT Java-使用GridData和GridLayout绘画

  5. 5

    SAPUi5使用情况网格和GridData

  6. 6

    尝试使用DBSCAN绘制异常值

  7. 7

    不使用scipy.interpolate.griddata插值pyplot中的NaN值

  8. 8

    为什么使用method = nearest的一维scipy.interpolate.griddata会产生nans?

  9. 9

    使用scipy.interpolate.griddata时如何设置插值点之间的最大距离?

  10. 10

    加快SciPy Griddata功能

  11. 11

    使用Numpy查找并打印数据的异常值

  12. 12

    使用 lapply 修剪数据以去除异常值

  13. 13

    Scipy的griddata方法总是失败

  14. 14

    使用 Seaborn 绘制箱线图后如何删除异常值?

  15. 15

    使用ELKI的异常值检测

  16. 16

    如何通过使用熊猫进行转换来消除而不处理异常值?

  17. 17

    循环创建变量以动态创建griddata()

  18. 18

    使用JQPlot绘制大型数据集

  19. 19

    使用相同的数据集绘制各种符号

  20. 20

    如何使用Shiny绘制上传的数据集?

  21. 21

    使用colorcode绘制Fisher的Iris数据集

  22. 22

    使用R替换包含NA的数据框中多个列的异常值

  23. 23

    使用rnorm连续创建数据,直到R中出现异常值

  24. 24

    尝试使用R删除大型数据库中的潜在异常值。

  25. 25

    如何使用百分位数过滤数据框以滤除异常值?

  26. 26

    如何取消数据集堆叠(使用数据透视)?

  27. 27

    使用z分数查找异常值

  28. 28

    均值排除使用dplyr的异常值

  29. 29

    使用numpy.argwhere移除异常值

热门标签

归档