R_3D图(一)

本文是R语言3D图系列的第一篇,主要介绍了如何使用R语言绘制三维地形图和2D、3D图像,包括DEM地形图、数学函数曲面、添加几何对象、颜色映射和等高线等,详细解析了相关函数参数和用法。
摘要由CSDN通过智能技术生成

640?wx_fmt=gif


作者:李誉辉  

四川大学在读研究生 


前言

R_ggplot2基础连载结束,今天开启R_3D图系列的连载。内容较丰富,大家可以收藏后在慢慢学习。你们的点赞和转发是对我最大的支持。


准备工作:

安装ggforce

devtools::install_github('thomasp85/ggforce')
install.packages("plot3D")

1.基础图形

1.1 三维地形图persp()

persp()函数在平面上绘制一个三维透视图,需要指定观察方向等信息。 persp()函数用于绘制曲面,相当于z = f(x, y)函数绘图。
语法:

persp(x = seq(0, 1, length.out = nrow(z)),  
      y = seq(0, 1, length.out = ncol(z)),   
      z, xlim = range(x), ylim = range(y),   
      zlim = range(z, na.rm = TRUE),   
      xlab = NULL, ylab = NULL, zlab = NULL,   
      main = NULL, sub = NULL,   
      theta = 0, phi = 15, r = sqrt(3), d = 1,   
      scale = TRUE, expand = 1,   
      col = "white", border = NULL, ltheta = -135, lphi = 0,   
      shade = NA, box = TRUE, axes = TRUE, nticks = 5,   
      ticktype = "simple", ...)   

参数解释:

  • x, y, 表示x和y坐标,必须按照升序排列,默认从0到1等间距的数值,
    如果x是一个含有2个元素的列表,这x\(x和x\)y则分别用于指定x,y。

  • z 为一个矩阵,表示z坐标。z也可以用x列表指定。

  • xlim, ylim, zlim,表示指定坐标轴显示范围,需要能够完全覆盖图形。

  • xlab, ylab,表示指定坐标轴标题内容,只能是字符串,数字也会被转成字符串。

  • main, sub, 表示指定主标题和副标题内容。

  • theta, phi, 指定观察方向
    theta指定左右角度(俯视图顺时针旋转为正),phi指定余纬度(上下角度,前视图顺时针旋转为正)。

  • r, 表示观测点与绘图立方体中心的距离。

  • d, 用于指定透视强度,d>1则将降低透视效果,d<1则将扩大透视效果。

  • scale, 表示3个坐标轴是否独立转化形成表面网格,TRUE则x, y,z坐标轴各自独立转化,
    FALSE则x, y,z坐标轴同比例缩放转化,以保留曲面真实曲率,在DEM地形图中很有用。

  • expand, 表示指定z轴缩放系数,expand < 1则z方向缩小,expand > 1则z方向放大。

  • col, 表示指定网格面的颜色,透明色将被忽略,循环赋予(nx-1)*(ny-1)个曲面网格面。

  • border, 表示指定网格线的颜色, 默认NULL对应par("fg")前景颜色,前景颜色默认“black”。
    值NA表示z对应边框颜色,当曲面有阴影时,关闭网格边线很有用。

  • ltheta, lphi, 表示指定打光方向,光线照射不到的地方将产生阴影
    ltheta(俯视图逆时针旋转为正)相当于改变房子的朝向, lphi(前视图逆时针为正)相当于太阳升起落下。
    光线起始位置为沿z轴负方向
    与观察方向相反,是因为打光方向与如进入眼睛的光都是矢量。

  • shade, 表示指定阴影指数,曲面网格上的阴影通过公式: ((1+d)/2)^shade计算,
    其中d表示垂直曲面网格的单位矢量与光源方向单位矢量的点积。
    shade值相当于点光源模型中一个点产生的阴影,shade值趋近于0则不产生阴影。0.5至0.75效果类似日光照明。

  • box, 表示是否显box框线,默认TRUE显示。

  • axes, 表示是否显示绘图立方体的坐标轴刻度及刻度线标签。默认TRUE显示。

  • ticktype, 表示指定坐标轴类型,默认"simple"表示仅仅绘制一个“箭头”,沿箭头方向数值逐渐增大。
    “detailed”表示每个2维平面都绘制完整的坐标轴。
    box = FALSE则不显示坐标轴。

  • nticks, 表示指定坐标轴刻度线数量(大约数量),若ticktype = "simple"则失效。

  • …, 其它绘图参数,与par()参数一样。

640?wx_fmt=png

1.1.1 DEM地形图

require(plot3D)

# 三维地图模型可视化
class(volcano)

[1] “matrix”


dim(volcano)

[1] 87 61


z <- 3 * volcano  # 放大高度坐标
x <- 10 * (1:nrow(z))  # 相当于从南到北
y <- 10 * (1:ncol(z))  # 相当于从东到西

par(bg = "slategray")  # 设定背景颜色为slategray

# 显示曲面网格,网格边线颜色为洋红,显示box框线
persp(x, y, z, theta = 135, phi = 30, col = "green3", scale = FALSE, ltheta = -120, 
    shade = 0.75, border = "magenta", box = TRUE)


640?wx_fmt=png


640?wx_fmt=gif


# 不显示曲面网格,border = NA, 不显示box边框, expand>1放大z轴
persp(x, y, z, theta = 135, phi = 30, col = "green3", expand = 1.5, scale = FALSE, 
    ltheta = -120, shade = 0.75, border = NA, box = FALSE)


640?wx_fmt=png


640?wx_fmt=gif


# 观察方向全部为0度。结果x轴从左到右,y轴从下到上。
persp(x, y, z, theta = 0, phi = 0, col = "green3", scale = FALSE, ltheta = -120, 
    shade = 0.75, border = NA, box = TRUE, ticktype = "simple")


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值