我有三列数据,并希望将它们绘制为x,一个作为y,一个作为z坐标(纬度,经度和第一点的高度)以制作3d表面他们。
rel.height lat long
15 37.02460 142.3736
-160 37.02462 142.37323
355 37.02463 142.3728
0 37.02463 142.3730
-400 37.02470 142.3731
-265 37.02473 142.3735
-225 37.02475 142.3728
-480 37.02476 142.3733
-475 37.02477 142.3730
-885 37.02485 142.3730
-605 37.02486 142.3727
-1030 37.02493 142.3731
-725 37.02494 142.3736
-1135 37.02498 142.3729
380 37.02521 142.3741
445 37.02528 142.3728
445 37.02551 142.3728
410 37.02551 142.3739
-215 37.02552 142.3742
-1670 37.02568 142.3730
-380 37.02573 142.3744
320 37.02577 142.3730
有一种简单的方法吗?
下面我的代码以某种方式绘制y上的所有三个变量,我不确定它在x上做了什么。 感谢
wireframe(as.matrix(Sites), scales = list(arrows = FALSE, x = list(Sites$long),
y = list(Sites$lat), z = list(Sites$rel.height)), xlab = "long", ylab = "lat",
zlab = "height")
答案 0 :(得分:0)
根据上面的评论,您似乎想要一个插值线框。这可以使用interp(...)
包中的akima
函数完成。 (见this reference。)
library(akima)
library(lattice)
reggrid <- interp(Sites$long,Sites$lat,Sites$rel.height,linear=T,extrap=F)
x.ticks <- round(reggrid$x[seq(1,length(reggrid$x),length=5)],5)
y.ticks <- round(reggrid$y[seq(1,length(reggrid$y),length=5)],5)
wireframe(reggrid$z, xlab="Long",ylab="Lat", zlab="Rel.Height",
scales=list(x=list(labels=x.ticks),
y=list(labels=y.ticks),
arrows=FALSE),
drape=T,colorkey=T)
就个人而言,我发现轮廓图更有用。
plot(Sites$long,Sites$lat,xlab="Longitude",ylab="Latitude")
image (reggrid,add=TRUE)
contour(reggrid,add=TRUE)
points (Sites$long,Sites$lat,pch = 16, col="blue")
最后,您可能会发现使用rgl
包来获得可旋转的3D表面会更有用。
library(rgl)
zlim <- range(reggrid$z,na.rm=T)
zlen <- zlim[2] - zlim[1] + 1
color.range <- rev(rainbow(zlen)) # height color lookup table
colors <- color.range[reggrid$z-zlim[1]+1] # assign colors to heights for each point
open3d()
persp3d(reggrid$x,reggrid$y,reggrid$z, col=colors,
xlab="Longitude", ylab="Latitude",zlab="Rel.Height")