作者:李誉辉
四川大学在读研究生
前言
这篇是plot3D包绘图系列之三,前一篇请戳:R_3D图(二),这一章节主要聚焦三维图的制作。做教程狠费精力的,别忘了点赞和转发。谢谢。
persp3D() 是persp()函数的扩展
ribbon3D() 与persp3D()有些类似,但不是多边形网格,而是带状的网格的曲面。
hist3D()产生三维的直方图。
3.1
语法
persp3D (x = seq(0, 1, length.out = nrow(z)),
y = seq(0, 1, length.out = ncol(z)), z, ...,
colvar = z, phi = 40, theta = 40,
col = NULL, NAcol = "white", breaks = NULL,
border = NA, facets = TRUE, colkey = NULL, resfac = 1,
image = FALSE, contour = FALSE, panel.first = NULL,
clim = NULL, clab = NULL, bty = "b",
lighting = FALSE, shade = NA, ltheta = -135, lphi = 0,
inttype = 1, curtain = FALSE, add = FALSE, plot = TRUE)
ribbon3D (x = seq(0, 1, length.out = nrow(z)),
y = seq(0, 1, length.out = ncol(z)), z, ...,
colvar = z, phi = 40, theta = 40,
col = NULL, NAcol = "white", breaks = NULL,
border = NA, facets = TRUE, colkey = NULL, resfac = 1,
image = FALSE, contour = FALSE, panel.first = NULL,
clim = NULL, clab = NULL, bty = "b",
lighting = FALSE, shade = NA, ltheta = -135, lphi = 0,
space = 0.4, along = "x",
curtain = FALSE, add = FALSE, plot = TRUE)
hist3D (x = seq(0, 1, length.out = nrow(z)),
y = seq(0, 1, length.out = ncol(z)), z, ...,
colvar = z, phi = 40, theta = 40,
col = NULL, NAcol = "white", breaks = NULL,
border = NA, facets = TRUE, colkey = NULL,
image = FALSE, contour = FALSE,
panel.first = NULL, clim = NULL, clab = NULL, bty = "b",
lighting = FALSE, shade = NA, ltheta = -135, lphi = 0,
space = 0, opaque.top = FALSE, zmin = NULL,
add = FALSE, plot = TRUE)
参数解释:
z, 为二维矩阵数据,用于绘制3D透视图。
x, y ,可以是2个向量,也可以是1个矩阵,
如果是向量,则x的长度必须等于z的行数,y的长度必须等于z的列数。
如果是矩阵(只用于persp3D), xy的维度应该与矩阵z相同。colvar,指定着色的变量,如果给出,则必须与矩阵z维度相同。
如果是NULL,NA,或FALSE将根据colvar切换颜色,
仅当boder参数被指定颜色,shade参数>0,或lighting = TRUE才会产生好的效果。col, 表示指定颜色色板,用于colvar颜色,
如果col = NULL, 且colvar指定了,则默认“红-黄-蓝”色板。
如果col = NULL, 且colvar指定,则col默认为grey灰度板。
为了与透视图相符,设定colvar = NULL, 使col为一个矩阵,其维度为nrow(z)-1行,ncol(z)-1列。NAcol, 表示指定
colvar
中缺失值的颜色,默认为白色。breaks, 为数字向量,表示
colvar
断点,默认增序排列,无序向量会被自动排序。colkey, 为逻辑值或NULL(默认)或列表。表示指定图例参数。
add, 为逻辑值,表示是否将该绘图对象添加到现有的绘图对象中,默认FALSE新建图层,TRUE则添加图层。
plot, 为逻辑值, 表示是否绘图,默认TRUE则绘图,FALSE则返回视角转换矩阵。
clab, 表示指定图例标题内容。colkey=TRUE生效。
clim, 表示指定图例显示范围,当colvar指定时生效,clim范围超出colvar则超出部分显示NA。
resfac, 表示指定x和y的分辨率因子,长度为1或2的数字向量指定,
数字大于1,则增加分辨率,通过插值z增加。
若向量长度为1,则在x和y对应的z插值数量相同。theta, phi, 表示指定观察透视图的方向,与
persp()
中一致。border, 表示指定曲面网格边线的颜色,默认NA不显示曲面网格边线。
facets, 为逻辑值或NA,表示是否指定曲面网格的颜色,TRUE则用col参数指定曲面网格的颜色,
FALSE则为网格为颜色为白色且网格边线为col指定的颜色(前提是border=NA)。image, 为逻辑值,表示是否在绘图立方体插入另一个图,
如果TRUE,则会底部绘制图像,还允许传递image2D()
函数的参数的列表,
此列表的一个参数side
表示将image2D()
图置于何处位置。side = z-value
, 表示将该图置于z轴value值位置处。side = "zmin"
,side = "zmax"
分别将该图置于底部和顶部,默认置于底部。contour, 为逻辑值,表示是否在绘图立方体中插入等高线, 如果TRUE, 则默认插入等高线图在底部,也可以通过
contour()
函数传递参数。
同样存在位置参数side
,side = "zmin"
,side = "zmax"
分别将该图置于底部和顶部,默认置于底部。panel.first, 表示指定一种变换函数,常常用于绘制背景网格和三维散点图的平滑处理。 该函数的其中一个参数应该是
pmat
矩阵变换。along, 表示指定绘制ribbons图的方向,c(“x”, “y”, “xy”)其中之一,表示ribbons平行x轴,y轴或xy平面。
curtain, 为逻辑值,TRUE表示ribbon或persp将紧挨着panels。
space, 为数值,表示指定bar/ribbons之间的空白间隙量,
对应hist3D()
, 则介于[0, 0.9]之间。对于ribbon3D()
, 则介于[0.1, 0.9]之间。
也可以是2个长度的向量,分别表示x,y方向的空白间隙量。bty, 表示指定box类型, 默认仅仅画背景panels, 只有当
persp()
中的box=TRUE
时才有效。
其它与perspbox()
函数中一致。bty = c(“b”, “b2”, “f”, “g”, “bl”, “bl2”, “u”, “n”)其中之一。lighting, 逻辑值或列表指定,表示对曲面网格打光,
FALSE则不打光,TRUE或list指定都会打光,则网格颜色可能变明亮,
list必须用下面的颜色空间指定:
ambient环境光, diffuse漫反射, specular镜面反射, exponent颜色数字, sr阳光反射指数, alpha透明度,shade, 表示指定阴影指数,与
persp()
中一样。ltheta, lphi, 表示指定打光方向,与
persp()
中一样。inttype, 表示指定多边形网格的插值类型,每个网格的显示由4个角点的坐标和1个颜色决定,共3种插值类型:
inttype = 1
(默认)与persp()
曲面一致,z值表示每个网格4个角点的z轴坐标。
如果指定了colvar参数,则将其colvar值重新计算到每个网格的中间,所以colvar维度必须是(nx-1)(ny-1),
且平均值取自源数据(nx和ny分别是x和y点的数量), 这将使颜色分布和阴影过渡更加平滑。inttype = 1
时,colvar中的NA值将在均值计算期间被使用,这将使NA对应的网格区域变大。inttype = 3
为另一种设置,除了NA值的处理不一样,
其它跟inttype = 1
一致,NA不会带入平均值计算过程中,这样会使NA对应的网格区域变小。inttype = 2
设置表示另一种插值方法,当colvar参数被指定的时候,这种设置使用得很频繁。
这种插值方法中,颜色过渡不会平滑处理。它假定z的值和colvar的值都定义在网格的中心的位置,
为了对网格作色,x,y,z对应的panels将扩大。grid数量增大到(nx+1)*(ny+1)。
当colvar被指定时,这将使曲面上的z数据比源数据过渡更加平滑。
这种插值更加适用于颜色变量colvar存在NA值的情况,因为取平均值过程会增加NA对应的网格区域。opaque.top, 为逻辑值,表示3D直方图中(设置alpha透明),bars顶面是否透明,TR