【问题标题】:Solving for zeroes in interpolated data in numpy/matplotlib在 numpy/matplotlib 中解决插值数据中的零
【发布时间】:2014-04-17 06:08:20
【问题描述】:

我有一些我有兴趣分析的二维范围内的数据。这些数据最初位于列表 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 之前会使用各种网格网格、加载文本等。

【问题讨论】:

  • 可以通过c = pl.contour(..., levels=[0])绘制0的曲线,也可以从c获取曲线上的点。如果这是你想要的,我可以添加一个答案来展示如何获得积分。
  • 谢谢 HYRY,这正是我想做的。从这个图中可以看出,我能够使用“级别”选项绘制线条:i61.tinypic.com/2ekkyup.png。如果您不介意向我展示如何轻松提取分数,那就太好了,我很乐意接受这个答案。

标签: python numpy matplotlib scipy


【解决方案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()

这是输出:

【讨论】:

  • HYRY,谢谢!棒极了!顺便说一句,你上面有错字吗?您的意思是“级别= [0,1]”吗?因为否则只有一个集合并指定两种颜色、线条样式等似乎毫无意义。有趣的是,这样做会产生这个很酷的情节:i62.tinypic.com/2i05hk3.png。虽然在这种情况下,您可以看到两种方法的来源略有不同。
  • 糟糕,意思是“靠近原点”。
  • 不同之处在于 0 级包含许多曲线。我需要获取级别 0 中的所有曲线,您可以使用 c.get_paths()[i] 进行 for 循环。
  • 啊,谢谢。按照你的建议做了,得到了这张图片:i57.tinypic.com/34s1fm8.png。几乎相同,除了水平曲线中有一些轻微的颗粒感。但对我来说已经足够好了(我认为这些微妙之处无论如何都不会影响我)。是什么决定了关卡包含多少条路径?您是否为每个不连续的关卡获得了新的路径?
猜你喜欢
  • 1970-01-01
  • 2022-01-25
  • 2014-12-04
  • 1970-01-01
  • 2016-10-09
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
相关资源
最近更新 更多