【问题标题】:Error : increasing 'x' and 'y' values expected in persp {fields}错误:增加 persp {fields} 中预期的“x”和“y”值
【发布时间】:2015-02-04 23:16:42
【问题描述】:

我在lat, lng 的空间中有 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)

但我还是有同样的问题。

我该怎么做?

谢谢。

【问题讨论】:

标签: r plot geospatial


【解决方案1】:

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

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) 

现在可以了。

编辑

我认为您真正想要做的是让您在 z 中获得 lan/lng 坐标并绘制它们。 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)  

哪些输出:

【讨论】:

  • 谢谢,但是当你这样做时:data$lat
  • 是的,我知道它改变了对的顺序(x,y 坐标)。我认为您需要使用此功能的方式是将您的 x、y 坐标放在 z 矩阵中。 x 和 y 值只是 x 和 y 轴的对应值。尝试将 x 和 y 作为默认值,即不要使用它们并使用 z 作为 lng、lan 坐标。我想这就是你需要的。
  • 是的,这就是我要找的。非常感谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-27
  • 2021-10-05
  • 2021-01-18
  • 2015-01-02
  • 1970-01-01
  • 2013-04-22
相关资源
最近更新 更多