plot3D | 三维数据绘图(3):mesh函数、surf3D函数、spheresurf3D函数


专注系列化高质量的R语言教程

推文索引 | 联系小编 | 付费合集


本篇是专门介绍plot3D工具包的最后一篇推文,主要介绍三个函数,其余函数读者可根据需要自行学习。本篇目录如下:

  • mesh函数

  • surf3D函数

  • spheresurf3D函数

library(plot3D)

mesh函数

mesh()函数是个很有用的辅助函数,可以根据两个或三个向量生成矩阵或数组。

mesh(x, y, z = NULL)
  • xyz均为向量结构;

  • z = NULL时,函数生成由两个矩阵组成的列表;每个矩阵的行数等于x的长度,列数等于y的长度。

第一个矩阵相当于将x按列重复;第二个矩阵相当于将y按行重复。示例如下:

mesh(1:2, 3:5)
## $x
##      [,1] [,2] [,3]
## [1,]    1    1    1
## [2,]    2    2    2
## 
## $y
##      [,1] [,2] [,3]
## [1,]    3    4    5
## [2,]    3    4    5

我们知道,向量外积可以使用操作符%o%计算(见推文数值运算符和逻辑运算符):

1:2 %o% 3:5
##      [,1] [,2] [,3]
## [1,]    3    4    5
## [2,]    6    8   10

将其拆开来看,就是mesh()函数输出结果的两个矩阵的哈达马积:

M = mesh(1:2, 3:5)
M$x * M$y
##      [,1] [,2] [,3]
## [1,]    3    4    5
## [2,]    6    8   10
  • z ≠ NULL时,函数生成有三个数组组成的列表;每个数组的三个维度分别等于xyz的长度。

mesh(1:2, 3:5, 6:7) 
## $x
## , , 1
## 
##      [,1] [,2] [,3]
## [1,]    1    1    1
## [2,]    2    2    2
## 
## , , 2
## 
##      [,1] [,2] [,3]
## [1,]    1    1    1
## [2,]    2    2    2
## 
## 
## $y
## , , 1
## 
##      [,1] [,2] [,3]
## [1,]    3    4    5
## [2,]    3    4    5
## 
## , , 2
## 
##      [,1] [,2] [,3]
## [1,]    3    4    5
## [2,]    3    4    5
## 
## 
## $z
## , , 1
## 
##      [,1] [,2] [,3]
## [1,]    6    6    6
## [2,]    6    6    6
## 
## , , 2
## 
##      [,1] [,2] [,3]
## [1,]    7    7    7
## [2,]    7    7    7

在下文函数的示例中,还会用到mesh()函数。

surf3D函数

surf3D()函数主要用来绘制三维几何图形,完整语法结构如下:

surf3D(x, y, z, ..., colvar = z, phi = 40, theta = 40,
       col = NULL, NAcol = "white", breaks = NULL,
       border = NA, facets = TRUE, colkey = NULL,
       panel.first = NULL, clim = NULL, clab = NULL, bty = "n",
       lighting = FALSE, shade = NA, ltheta = -135, lphi = 0,
       inttype = 1, add = FALSE, plot = TRUE)
  • x、y、z:构成三维几何图形曲面的散点坐标。

下图展示了球坐标和直角坐标的关系:

1ca9e6cd52213c91ddbf0b0c79e220f7.png

根据这一关系,使用下面代码绘制一个球形:

M = mesh(
  x = seq(0, 2*pi, length.out = 100),
  y = seq(0, pi, length.out = 100)
) 

phi = M$x
theta = M$y
r = 2 

x = r*sin(theta)*cos(phi)
y = r*sin(theta)*sin(phi)
z = r*cos(theta)

par(mfrow = c(1,2))
surf3D(x,y,z, colvar = z)
surf3D(x,y,z, facets = F)
571ab5cf77685322d180d6c2d388a9e7.png

对于球形来说,r是个固定的数值,即球半径。下面代码通过变化r绘制新的图形:

r0 = seq(0, 2, length.out = 100)
r = matrix(rep(r0, 100), nrow = 100, byrow = T)

x = r*sin(theta)*cos(phi)
y = r*sin(theta)*sin(phi)
z = r*cos(theta)

surf3D(x,y,z)
3b9e10cb4ed56bc5f502404e4e8082fb.png

spheresurf3D函数

spheresurf3D()函数是绘制球形的快捷函数:

spheresurf3D()
8d68fecb226c66dd6f2430eb04cab864.png

通过设置colvar参数可给球形上色:

par(mfrow = c(1,2))
spheresurf3D(colvar = Hypsometry$z)
spheresurf3D(colvar = Hypsometry$z,
             theta = 200, phi = 30)
4bb7059ee2fa3e0d5459bf3fa37aae8f.png

更多示例可参见函数的帮助文档。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值