Error : increasing 'x' and 'y' values expected in persp {fields}
Error : increasing 'x' and 'y' values expected in persp {fields}
我在 space 中有 500 分 lat
,lng
为:
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
我使用
对 x
和 y
进行了排序
data=data.frame(lng,lat)
data=data[ order(data[,1],data[,2]), ]
我又试了一次
persp(data[,1],data[,2],z)
但我还是遇到了同样的问题
我该怎么做?
谢谢。
问题在于参数 z
以及 x
和 y
的顺序。正如影子在评论中提到的,在这种情况下,这需要是 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)
输出:
我在 space 中有 500 分 lat
,lng
为:
lng=runif(100,1,4)
lat=runif(100,40,40.1)
假设我们在那里(密度)为
z=rnorm(1000)
我尝试使用 persp
persp(lng,lat,z)
但是我有这个错误:
Error : increasing 'x' and 'y' values expected
我使用
对x
和 y
进行了排序
data=data.frame(lng,lat)
data=data[ order(data[,1],data[,2]), ]
我又试了一次
persp(data[,1],data[,2],z)
但我还是遇到了同样的问题
我该怎么做?
谢谢。
问题在于参数 z
以及 x
和 y
的顺序。正如影子在评论中提到的,在这种情况下,这需要是 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)
输出: