R |
您所在的位置:网站首页 › 3d的立体图 › R |
作者:李誉辉 四川大学在读研究生 前言 这篇是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 |