首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >绘制网格的三维地形图

绘制网格的三维地形图
EN

Stack Overflow用户
提问于 2015-02-07 17:13:17
回答 1查看 1.6K关注 0票数 3

我想使用R复制类似于下面的图,可能是使用ggplot (虽然我怀疑它是否可能,AFAIK,它没有3D功能)。我拥有的数据通常是光栅包中的光栅文件,但我可以以最合适的格式转换它。

该图摘自:“2013年气候变化:物理科学基础:第一工作组对政府间气候变化专门委员会第五次评估报告的贡献”,图1.14。我不知道是哪个软件制作了那个情节。

我想唯一的办法是使用点阵::云(线框)或类似的东西?我似乎找不到任何办法强迫线框有一个圆柱形图,而不是表面图;此外,基于海洋高度的着色--保持网格的高度--很可能是不可能的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-27 09:40:24

我找了点时间看看这个。最后,我采取了以下方法(链接R代码):

http://pastebin.com/dA2nNNS0

感谢评论中的人,他们为我指明了正确的方向。

我保存文件仍然有问题,但这是另一个问题的材料。

巴斯丁代码

代码语言:javascript
复制
library(raster) 
library(rgl)

r <- raster("topo12.nc", varname="topo") #Read file
cols <- terrain.colors(3100) #Define colors

binplot.3d <- function(x,y,z,alpha=1,topcol="#ff0000",sidecol="#aaaaaa"){ #Binplotting function
  save <- par3d(skipRedraw=TRUE)
  on.exit(par3d(save))

  x1<-c(rep(c(x[1],x[2],x[2],x[1]),3),rep(x[1],4),rep(x[2],4))
  z1<-c(rep(0,4),rep(c(0,0,z,z),4))
  y1<-c(y[1],y[1],y[2],y[2],rep(y[1],4),rep(y[2],4),rep(c(y[1],y[2],y[2],y[1]),2))
  x2<-c(rep(c(x[1],x[1],x[2],x[2]),2),rep(c(x[1],x[2],rep(x[1],3),rep(x[2],3)),2))
  z2<-c(rep(c(0,z),4),rep(0,8),rep(z,8) )
  y2<-c(rep(y[1],4),rep(y[2],4),rep(c(rep(y[1],3),rep(y[2],3),y[1],y[2]),2) )
  rgl.quads(x1,z1,y1,col=rep(sidecol,each=4),alpha=alpha)
  rgl.quads(c(x[1],x[2],x[2],x[1]),rep(z,4),c(y[1],y[1],y[2],y[2]),
              col=rep(topcol,each=4),alpha=1) 
  rgl.lines(x2,z2,y2,col="#000000")
}

cat("Row ( of", dim(r)[1],"):")
for (row in 1:dim(r)[1]) { #Plotting loop
    for (col in 1:dim(r)[2]) {
    if (round(r[row, col]) < 1) {
    binplot.3d(c(col-1,col), c(row-1,row), r[row, col]/500, alpha=1, topcol="cadetblue3")
    } else {
    binplot.3d(c(col-1,col), c(row-1,row), r[row, col]/500, alpha=1, topcol=cols[round(r[row, col])])
#   cat(round(r[row, col]), "\t")
    }
    }
    cat(row, "")
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28384999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档