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

2024-03-29 14:25:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些二维范围的数据,我有兴趣分析。这些数据最初出现在列表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)
< >我用

绘制了席、义、子数据。 ^{pr2}$

这就产生了这个图:contour plot

在这张图中,你可以看到S型曲线,其中的值等于零(顺便说一句:数据的变化不像colorbar中显示的那样快——这只是我将数据规格化为-10-10的结果,而实际上数据的范围远远超出了这个范围;我这样做是为了让零值区域显示得更好——也许还有更好的方法来实现。在

分散的点只是我有原始数据的点(是的,在这个例子中,我的数据已经在一个规则的网格上)。我想知道的是,是否有一个好的方法来提取曲线为零的值,并得到x,y对,如果绘制成一条线,它将跟踪colormesh中的零区域。我可以插入一个非常精细的网格,然后用暴力搜索最接近于零的值。但是,有没有一种更自动的方式来做这件事,或者更自动地画出这条“零线”?在

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


Tags: 数据方法网格区域列表np绘制array
1条回答
网友
1楼 · 发布于 2024-03-29 14:25:28

下面是一个完整的例子:

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

相关问题 更多 >