我正在尝试使用以下格式的文件的matplotlib绘制等高线:
x1 y1 z1
x2 y2 z2型
等
我可以用numpy.loadtxt加载它来获取向量。到目前为止,没有麻烦。
我读这篇文章是为了学习如何绘制,并且可以通过复制粘贴来复制,所以我确信我的安装没有任何问题:
http://matplotlib.org/examples/pylab_examples/griddata_demo.html
我知道我必须输入x和y作为向量,z作为数组,这可以用griddata完成。这也是我在这个网站上找到的。
文件上说:
zi = griddata(x,y,z,xi,yi) fits a surface of the form z = f*(*x, y) to the data in the (usually) nonuniformly spaced vectors (x, y, z). griddata() interpolates this surface at the points specified by (xi, yi) to produce zi. xi and yi must describe a regular grid, can be either 1D or 2D, but must be monotonically increasing.
为了示例起见,我编写了以下代码:
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as ml
x=np.linspace(1.,10.,20)
y=np.linspace(1.,10.,20)
z=np.linspace(1.,2.,20)
xi=np.linspace(1.,10.,10)
yi=np.linspace(1.,10.,10)
zi = ml.griddata(x,y,z,xi,yi)
但是,当涉及到griddata时,我会得到以下错误: 索引器错误:索引无效
所以,我试图对doc的示例进行一些修改,如下所示:
from matplotlib.mlab import griddata
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-2.1,2.1,300)
y = np.linspace(-2.1,2.1,300)
z = x*np.exp(-x**2-y**2)
# define grid.
xi = np.linspace(-2.1,2.1,100)
yi = np.linspace(-2.1,2.1,200)
# grid the data.
zi = griddata(x,y,z,xi,yi,interp='linear')
我也犯了同样的错误。我不明白怎么回事。
谢谢你的帮助。
好吧,我终于找到了解决办法。对于那些感兴趣的人,这里有一个技巧:使用Scipy中的griddata和“最近”方法。
考虑:
这意味着我们知道直线
x=y
上某些点的z值。从那里开始
要求
mlab.griddata
外推矩形网格中所有点的z
值。我们已经给出了很多关于
z
沿这条线如何变化的信息,但是没有关于z
沿垂直方向(远离x = y
线)如何变化的信息。由于mlab.griddata
拒绝猜测,因此引发了一个错误。如果初始的
x
,y
数据分布更随机,您将获得更好的结果:如果希望
mlab.griddata
以任意方式将数据沿着x=y
线外推到整个网格,可以添加两个额外的边界点(xmin, ymax, z[0])
和(xmax,ymin,z[-1])
:相关问题 更多 >
编程相关推荐