我有兴趣分析的2D范围内的一些数据。这些数据最初在列表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)
这产生了这个情节:
在此图中,您可以看到S值曲线,其中值等于零(除此之外:数据不会像颜色条中所示的那样快速变化 - 这只是一个结果当数据实际延伸到远远超出该范围时,我将数据标准化为-10-10;我这样做是为了使零值区域显示得更好 - 也许还有更好的方法来做到这一点......)。
散点是我原始数据的点(是的,在这种情况下,我的数据已经在常规网格上)。我很好奇的是,我是否有一个很好的方法来提取曲线为零的值,并获得x,y对,如果绘制为一条线,将跟踪颜色网格中的零区域。我可以插入到一个非常精细的网格,然后只是强力搜索最接近零的值。但有没有更自动的方式来做到这一点,或者更自动地绘制这个"零线"?
还有一个第二个问题:我正确使用griddata,对吧?我有这些简单的一维数组,尽管其他人在调用griddata之前会使用各种网格,加载文本等。
答案 0 :(得分:1)
以下是一个完整的例子:
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()
这是输出: