python - 求解 numpy/matplotlib 中插值数据中的零

标签 python numpy matplotlib scipy

我有一些二维范围内的数据,我有兴趣对其进行分析。这些数据最初位于列表 x、y 和 z 中,其中 z[i] 是位于 (x[i],y[i]) 处的点的值。然后我使用

将这些数据插入到规则网格中
x=np.array(x)
y=np.array(y)
z=np.array(z)
xi=np.linspace(minx,maxx,100)
yi=np.linspace(miny,maxy,100)
zi=griddata(x,y,z,xi,yi)

然后我使用

绘制了 xi,yi,zi 数据
plt.contour(xi,yi,zi)
plt.pcolormesh(xi,yi,zi,cmap=plt.get_cmap('PRGn'),norm=plt.Normalize(-10,10),vmin=-10,vmax=10)

这产生了这个情节:contour plot

在此图中,您可以看到类似 S 的曲线,其中值等于 0(此外:数据变化并不像颜色条中所示那么快 - 这只是我将数据标准化为的结果 - 10-10,当它实际上远远超出该范围时;我这样做是为了让零值区域显示得更好——也许还有更好的方法......)。

分散的点只是我拥有原始数据的点(是的,在这种情况下我的数据已经在规则网格上)。我很好奇的是,是否有一种好方法可以提取曲线为零的值并获得 x,y 对,如果将其绘制为一条线,则会在颜色网格中跟踪该零区域。我可以插入一个非常精细的网格,然后强力搜索最接近零的值。但是有没有一种更自动的方法来做到这一点,或者有一种更自动的方法来绘制这个“零线”?

还有一个第二个问题:我正确使用了 griddata,对吧?我有这些简单的一维数组,尽管其他地方的人在调用 griddata 之前使用各种网格、加载文本等。

最佳答案

这是一个完整的示例:

import numpy as np
import matplotlib.pyplot as plt
y, x = np.ogrid[-1.5:1.5:200j, -1.5:1.5:200j]
f = (x**2 + y**2)**4 - (x**2 - y**2)**2

plt.figure(figsize=(9,4))
plt.subplot(121)
extent = [np.min(x), np.max(x), np.min(y), np.max(y)]
cs = plt.contour(f, extent=extent, levels=[0.1], 
     colors=["b", "r"], linestyles=["solid", "dashed"], linewidths=[2, 2])

plt.subplot(122)
# get the points on the lines
for c in cs.collections:
    data = c.get_paths()[0].vertices
    plt.plot(data[:,0], data[:,1], 
        color=c.get_color()[0],  linewidth=c.get_linewidth()[0])

plt.show()

这是输出:

enter image description here

关于python - 求解 numpy/matplotlib 中插值数据中的零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23096018/

相关文章:

python - 如何在 Pandas 中将不规则文本文件读取为数据框

python - Python sklearn coef_ 输出中的 target 是什么?

python - 查找两个数组之间分组项匹配的索引

python - 如何注释数据点

python - 使用 Matplotlib 自定义 X 轴日期范围

Python 类型错误 : float() argument must be a string or a number, 而不是 'SingleBlockManager'

python - 如何使用 Python 在 WordNet 中生成形容词的反义词列表

python - 从 numpy 矩阵获取项目,索引位于数组中

python - 生成所有可能的 n 维 k*k*...*k 数组,每个数组沿轴有一排

python - pandas 数据框中的 numpy datetime64