我在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)
但我仍有同样的问题。
我该怎么做?
谢谢。
答案 0 :(得分:1)
问题是参数z
以及x
和y
的排序。正如评论中提到的影子一样,在这种情况下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
现在就可以了。
修改强>
我认为你真正想做的是在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}}
哪个输出: