R

您所在的位置:网站首页 3d的立体图 R

R

2023-09-17 05:29| 来源: 网络整理| 查看: 265

640?wx_fmt=gif

作者:李誉辉  

四川大学在读研究生 

前言

这篇是plot3D包绘图系列之三,前一篇请戳:R_3D图(二),这一章节主要聚焦三维图的制作。做教程狠费精力的,别忘了点赞和转发。谢谢。

3 三维图(3-D perspectives)

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顶面是否透明,TRUE则不透明,默认FALSE表示透明。

zmin, 表示3D直方图中,设置bars的底面位置,默认NULL表示底面将处在zmin位置上。

…, 其它绘图参数,与persp()函数中参数一致。包括:xlim, ylim, zlim, xlab, ylab, zlab,main, sub, r, d, scale, expand, box, axes, nticks, ticktype。还有perspbox()中一些参数:col.axis, col.panel,lwd.panel, col.grid, lwd,grid。还有公共参数: alpha设定绘图对象的透明度(从0到1),lty, lwd分别设置网格边线的线型和线宽(仅当border 不是NA)

注意:xlim, ylim, zlim仅仅表示设定坐标轴的显示范围,超出xlim,ylim, zlim范围的图形对象也会被绘制出来。如果要设定绘制图形对象的范围,使用plotdev()函数。

3.2

 persp3D()

比较persp3D与persp函数的参数:

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) 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", ...)

参数比较结果:

persp3D中的xlim, ylim, zlim, 不一样,仅仅用于指定坐标轴的显示范围,而persp中需要覆盖住图形的范围。

persp3D中增加了颜色标度断点参数breaks, 以进行着色。

persp3D中增加了参数facets参数,表示是否显示网格面,可以不显示网格面,只显示网格线。

persp3D中增加了颜色参数和图例参数: colvar,NAcol, colkey。

persp3D中增加了lighting参数(是否打光,打光类型),而persp中只有shade参数。

persp3D中增加了image和contour参数,可以插入一个平面图。

persp3D中增加了resfac 参数,表示指定各个方向的分辨率因子。

persp3D中增加了inttype 参数,表示可以设置网格插值类型。

persp3D中增加了curtain 参数, 表示是否紧挨着panels。

persp3D中增加了图例相关的参数: clab图例标题内容, clim图例显示范围,能自动添加图例。

3.2.1 breaks参数及列表传参

persp3D(z = volcano, contour = list(side = "z", dDepth = 0.))设定等高线深度。

library(plot3D) # 设定主标题,图例标题, 设定标度断点以着色, 默认scale = TRUE表示3个坐标轴独立缩放 persp3D(z = volcano, main = "volcano", clab = c("height", "m"),  breaks = seq(80,200, by = 10)) # 设置颜色标度断点 # expand参数z轴方向缩放,expand


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3