错误:增加persp {fields}中预期的'x'和'y'值

时间:2015-02-04 09:52:21

标签: r plot geospatial

我在latlng作为:

的空格中有500分
lng=runif(100,1,4)
lat=runif(100,40,40.1)

让我们说我们有(密度)为

z=rnorm(1000)

我尝试使用persp

绘制3D表面
persp(lng,lat,z)

但我有这个错误:

Error : increasing 'x' and 'y' values expected

我使用

xy进行了排序
data=data.frame(lng,lat)
data=data[ order(data[,1],data[,2]), ]

我再试一次

persp(data[,1],data[,2],z)

但我仍有同样的问题。

我该怎么做?

谢谢。

1 个答案:

答案 0 :(得分:1)

问题是参数z以及xy的排序。正如评论中提到的影子一样,在这种情况下dim(z) = length(x) x length(y)需要100x100的矩阵。persp.default。显然x和y需要两者同时排序,就像上面提到的阴影一样,在if (any(diff(x) <= 0) || any(diff(y) <= 0)) #both need to be ordered stop("increasing 'x' and 'y' values expected") 的源代码中可以看到as.well:

lng=runif(100,1,4)
lat=runif(100,40,40.1)
z=matrix(rnorm(10000),ncol=100,nrow=100) #use the correct z as matrix
data=data.frame(lng,lat)
data=data[ order(data[,1],data[,2]), ]   #just order lng as you do 
data$lat <- sort(data$lat)               #you need to sort lat too

persp(data[,1] ,data[,2], z) 

以下是有效的:

z

现在就可以了。

enter image description here

修改

我认为你真正想做的是在z中设置lan / lng坐标并绘制它们。 lng=runif(100,1,4) lat=runif(100,40,40.1) z= as.matrix(data.frame(lng=lng,lat=lat)) z=matrix(rnorm(10000),ncol=100,nrow=100) #z contains lan and lng #plot z with default x and y values (or use sorted lng and lat instead) persp( z = z) 参数需要携带坐标。 x和y参数分别只包含x和y轴的值。您可以使用默认的x和y argumens(即将它们留空)或仅分别对lan和lng进行排序以提供实际值。所以,您正在寻找的解决方案是:

{{1}}

哪个输出:

enter image description here