在3d轴上绘制3列数据

时间:2014-04-04 03:56:02

标签: r

我有三列数据,并希望将它们绘制为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")

1 个答案:

答案 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")