Error : increasing 'x' and 'y' values expected in persp {fields}

Error : increasing 'x' and 'y' values expected in persp {fields}

我在 space 中有 500 分 latlng 为:

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)

但我还是遇到了同样的问题

我该怎么做?

谢谢。

问题在于参数 z 以及 xy 的顺序。正如影子在评论中提到的,在这种情况下,这需要是 dim(z) = length(x) x length(y) 的矩阵 100x100。显然 x 和 y 需要 both 同时排序,就像上面提到的阴影一样,在 persp.default as.well:[= 的源代码中可以看到22=]

if (any(diff(x) <= 0) || any(diff(y) <= 0)) #both need to be ordered
        stop("increasing 'x' and 'y' values expected")

因此以下工作:

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) 

现在可以使用了。

编辑

我认为您真正想要做的是让您 lan/lng 在 z 中坐标并绘制它们。 z 参数需要携带坐标。 x 和 y 参数只是分别携带 x 和 y 轴的值。您可以使用默认的 x 和 y 参数(即,将它们留空)或单独对 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)  

输出: