热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

R_3D图(三)

作者:李誉辉四川大学在读研究生前言这篇是plot3D包绘图系列之三,前一篇请戳:R_3D图(二),这一章节主要聚焦三维图的制

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()函数传递参数。
    同样存在位置参数
    sideside = "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()

比较persp3Dpersp函数的参数:

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,NAcolcolkey

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

  • persp3D中增加了imagecontour参数,可以插入一个平面图。

  • 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 &#61; volcano, main &#61; "volcano", clab &#61; c("height", "m"), breaks &#61; seq(80,200, by &#61; 10)) # 设置颜色标度断点# expand参数z轴方向缩放&#xff0c;expand<1缩小&#xff0c;使用列表传递图例参数
persp3D(z &#61; volcano, x &#61; 1: nrow(volcano), y &#61; 1:ncol(volcano), # x, y比默认的数值大expand &#61; 0.3, main &#61; "volcano", facets &#61; FALSE, scale &#61; FALSE, # scale &#61; FALSE表示x,y比例不变clab &#61; "height, m", colkey &#61; list(side &#61; 1, length &#61; 0.5)) # 图例参数&#xff1a;side&#61;1底部&#xff0c;图例箱体缩短


640?wx_fmt&#61;png

640?wx_fmt&#61;png

3.2.2 facets参数和curtain参数

with函数参考用法1

&#xff08;http://trefoil.github.io/2013/10/15/rwithby.html&#xff09;
with函数参考用法2

&#xff08;https://zhuanlan.zhihu.com/p/25847796&#xff09;

library(plot3D)x <- seq(-pi, pi, by &#61; 0.2)
y <- seq(-pi, pi, by &#61; 0.3)
grid <- mesh(x, y)  # mesh函数创建一个2维或3维的grid绘图对象z <- with(grid, cos(x) * sin(y))  # 返回1个矩阵对象&#xff0c;值为cos(x) * sin(y) # 默认绘图
persp3D(z &#61; z, x &#61; x, y &#61; y)# facets&#61;FALSE,不显示网格面&#xff0c;只显示网格线&#xff0c;curtain &#61;
# TRUE表示图形外轮廓与box贴紧。
persp3D(z &#61; z, x &#61; x, y &#61; y, facets &#61; FALSE, curtain &#61; TRUE)


640?wx_fmt&#61;png

640?wx_fmt&#61;png

3.2.3 contour和image参数(插入平面图)

library(plot3D)x <- seq(1, nrow(volcano), by &#61; 3)
y <- seq(1, ncol(volcano), by &#61; 3)
Volcano <- volcano[x, y] # 抽取volcano中x行&#xff0c;y列对应的元素赋予Volcano,约抽取了1/3的数据# 插入等高线平面图&#xff0c;默认在zmin处插入&#xff0c;设定z轴显示范围
persp3D(z &#61; Volcano, contour &#61; TRUE, zlim&#61; c(-200, 200), image &#61; FALSE)


640?wx_fmt&#61;png

# 插入平面等高线图&#xff0c;插入等高线背景图&#xff0c;列表传参
persp3D(z &#61; Volcano, x &#61; x, y &#61; y, scale &#61; FALSE,  # scale&#61;FALSE表示x,y比例不变contour &#61; list(nlevels &#61; 20, col &#61; "blue"), # 设定等高线颜色为蓝色zlim &#61; c(-200, 200), expand &#61; 0.2, # 设定z轴显示范围&#xff0c;expand &#61; 0.2 表示z轴图形压缩image &#61; list(col &#61; alpha.col(col &#61; "magenta", # 给等高线图添加背景&#xff0c;col深浅与z轴相关alpha &#61; seq(from &#61; 0, to &#61; 1, len &#61; 100)))) #  


640?wx_fmt&#61;png

# 等高线同时插入到多个位置&#xff0c;自定义平面图位置&#xff0c;使用side参数&#xff0c;
persp3D(z &#61; Volcano, contour &#61; list(side &#61; c("zmin", "z", "350")), # 等高线插入3个位置&#xff0c;zlim &#61; c(-100, 400), phi &#61; 20, image &#61; list(side &#61; 350)) # 图太多了&#xff0c;拓展z轴范围


640?wx_fmt&#61;png

3.2.4 inttype和colvar参数

colvar颜色参数为与z维度一致的矩阵, 指定colvar参数后&#xff0c;图例就表现colvar值了&#xff0c;不在是z的值了。

library(plot3D)# 默认inttype &#61; 1
persp3D(z &#61; Volcano, shade &#61; 0.5, colkey &#61; FALSE)# 设定inttype &#61; 2, 在colvar存在NA(默认Z存在NA时)时&#xff0c;更准确
persp3D(z &#61; Volcano, inttype &#61; 2, shade &#61; 0.5, colkey &#61; FALSE)# 设定colvar参数## 创建数据
x <- y <- seq(0, 2 * pi, length.out &#61; 10)
z <- with(mesh(x, y), cos(x) * sin(y)) &#43; runif(100)  # runif生成100个随机分布随机数
cv <- matrix(0.5 * runif(100), nrow &#61; 10)  # 生成10*10矩阵## 绘图&#xff0c;colvar指定随机颜色矩阵&#xff0c; 图例展示colvar值了
persp3D(x, y, z, colvar &#61; cv)  #
persp3D(x, y, z, colvar &#61; cv, inttype &#61; 2)  # inttype&#61;2能更好的展示colvar变量的分布


640?wx_fmt&#61;png

640?wx_fmt&#61;png

640?wx_fmt&#61;png

640?wx_fmt&#61;png

3.2.5 inttype参数影响缺失值变化

library(plot3D)par(mfrow &#61; c(2, 2))# 创建数据
VV <- V2 <- volcano[10:15, 10:15] # 筛选地10到15行&#xff0c;10到15列的元素&#xff0c;6*6矩阵&#xff0c;并赋值给2个对象
V2[3:4, 3:4] <- NA # 更新矩阵元素&#xff0c;3到4行&#xff0c;3到4列更改为缺失值
V2[4, 5] <- NA # 4行5列对应元素更改为缺失值# 二维网格图&#xff0c;展示colvar矩阵中NA缺失值分布
image2D(V2, border &#61; "black")  # x对应矩阵的行&#xff0c;y对应矩阵的列# inttype &#61; 1插值后&#xff0c;z的维度减少1行1列&#xff0c;变成了5*5矩阵
persp3D(z &#61; VV, colvar &#61; V2, inttype &#61; 1, theta &#61; 0, # inttype &#61; 1插值后&#xff0c;缺失值增加&#xff0c;变成8个phi &#61; 20, border &#61; "black", main &#61; "inttype &#61; 1") # 添加主标题# inttype &#61; 2插值后&#xff0c;z的维度不变&#xff0c;缺失值数量及分布不变。
persp3D(z &#61; VV, colvar &#61; V2, inttype &#61; 2, theta &#61; 0, # inttype &#61;2插值后&#xff0c;缺失值数量及分布不变phi &#61; 20, border &#61; "black", main &#61; "inttype &#61; 2") # 添加主标题# inttype &#61; 3插值后&#xff0c;z的维度减少1行1列&#xff0c;但colvar缺失值减少
persp3D(z &#61; VV, colvar &#61; V2, inttype &#61; 3, theta &#61; 0,  # inttype &#61; 3插值后&#xff0c;缺失值减少&#xff0c;变成1个phi &#61; 20, border &#61; "black", main &#61; "inttype &#61; 3") # 添加主标题


640?wx_fmt&#61;png

3.2.6 panel.first及函数传参

panel.first参数用于指定box的panels类型&#xff0c;也可以使用函数在panels上添加绘制的图形对象。

library(plot3D)par(mfrow &#61; c(1, 1))# 构建一个包含绘图对象的函数&#xff0c;在后面panel.first参数中调用  
panelfirst <- function(trans) {zticks <- seq(100, 180, by &#61; 20) # 5个长度的向量len <- length(zticks) # len &#61; 5# 用trans3D新建2个空间转化矩阵XY0 <- trans3D(x &#61; rep(1, len), y &#61; rep(1, len), z &#61; zticks, # trans3D函数与trans3d作用一样&#xff0c;pmat &#61; trans)XY1 <- trans3D(x &#61; rep(1, len), y &#61; rep(61, len), z &#61; zticks,pmat &#61; trans)# 绘制第1个平面图&#xff0c;绘制几条虚线segments(XY0$x, XY0$y, XY1$x, XY1$y, lty &#61; 2) # R自带函数segments绘制虚线rm <- rowMeans(volcano) # 在z中列为y, 行为x          XY <- trans3D(x &#61; 1:87, y &#61; rep(ncol(volcano), 87), z &#61; rm, pmat &#61; trans)# 绘制第2个平面图&#xff0c;绘制1条曲线lines(XY, col &#61; "green", lwd &#61; 2)
}# 绘图&#xff0c;设置panel.first参数&#xff0c;绘制panels中的图形, 将persp3D产生的空间转化矩阵代入panelfirst的trans
# panels添加顺序安装绘制顺序
persp3D(z &#61; volcano, x &#61; 1:87, y &#61; 1: 61, scale &#61; FALSE, theta &#61; 10,expand &#61; 0.2, panel.first &#61; panelfirst, colkey &#61; FALSE)

640?wx_fmt&#61;png

3.2.7 col参数指定色板

library(plot3D)# 设定col为gg.col色板(ggplot2默认色板)
persp3D(z &#61; volcano, shade &#61; 0.3, col &#61; gg.col(100))  # 不指定colvar参数时&#xff0c;颜色与z坐标匹配  # lighting参数指定打光&#xff0c;光照类型还没搞懂怎样设置
persp3D(z &#61; volcano, lighting &#61; TRUE, lphi &#61; 90)# 自定义连续渐变色板
persp3D(z &#61; volcano, shade &#61; 0.3, col &#61; ramp.col(col &#61; c("cyan", "magenta"), n &#61; 102, alpha &#61; 0.5))# 设置颜色全部为灰蓝色&#xff0c;
persp3D(z &#61; volcano, col &#61; "lightblue", shade &#61; 0.3, bty &#61; "b2")persp3D(z &#61; volcano, col &#61; "grey", shade &#61; 0.3)


640?wx_fmt&#61;png

640?wx_fmt&#61;png

640?wx_fmt&#61;png

640?wx_fmt&#61;png

640?wx_fmt&#61;png

3.2.8 add参数添加图层

最后一个图层才设定plot &#61; TRUE

library(plot3D)clim <- range(volcano) # 绘制第一个图层&#xff0c;
persp3D(z &#61; volcano, zlim &#61; c(100, 600), clim &#61; clim, col &#61; ramp.col(col &#61; c("cyan", "magenta"), n &#61; 102, alpha &#61; 1),# clim 指定图例显示范围box &#61; FALSE, plot &#61; FALSE)# 绘制第2个图层&#xff0c;向z轴正向偏移200个单位, volcano设定等于原来的z轴
persp3D(z &#61; volcano &#43; 200, clim &#61; clim, colvar &#61; volcano, col &#61; ramp.col(col &#61; c("cyan", "magenta"), n &#61; 102, alpha &#61; 1), # add &#61; TRUE, colkey &#61; FALSE, plot &#61; FALSE)# 绘制第3个图层&#xff0c;向z轴正向偏移400个单位
persp3D(z &#61; volcano &#43; 400, clim &#61; clim, colvar &#61; volcano, col &#61; ramp.col(col &#61; c("cyan", "magenta"), n &#61; 102, alpha &#61; 1), add &#61; TRUE, colkey &#61; FALSE)    # 默认plot &#61; TRUE


640?wx_fmt&#61;png

3.3

ribbon3D()

ribbon3D()persp3D()比较&#xff1a;
* z与
persp3D()中的数据不同&#xff0c;为了不形成封闭的网格&#xff0c;必须对volcano数据集进行筛选行或筛选列。
* 通过设定
along参数指定方向条带方向&#xff0c;默认along &#61; x。 * 增加了space参数,设定条带之间的空白间隙量。默认space &#61; 0.4。

3.3.1 筛选数据集和along参数

  • volcano数据集列相当于y, 行相当于x。

  • 筛选列&#xff0c;y不连续&#xff0c; 条带沿x方向。默认along &#61; "x"

  • 筛选行&#xff0c;x不连续&#xff0c; 条带沿y方向。设定along &#61; "y"

  • 不筛选数据&#xff0c;则设定along &#61; "xy", 结果形成网状条带。

library(plot3D)# 默认条带沿x方向
V <- volcano[, seq(1, ncol(volcano), by &#61; 3)]  ## 筛选数据集&#xff0c;筛选列&#xff0c;间隔2个列取1列数据ribbon3D(z &#61; V, col &#61; ramp.col(col &#61; c("cyan", "magenta"), n &#61; 102, alpha &#61; 1),colkey &#61; list(width &#61; 0.5, length &#61; 0.5,  # 列表传递图例参数cex.axis &#61; 0.8, side &#61; 2), clab &#61; "m") # cex.axis坐标轴比例变为0.8倍


640?wx_fmt&#61;png

# 设定along &#61; "y"&#xff0c; 条带沿y方向&#xff0c; space &#61; 0.3减小条带间隙Vy <- volcano[seq(1, nrow(volcano), by &#61; 3), ] ## 筛选数据集&#xff0c;筛选行&#xff0c;间隔2个行取1行数据ribbon3D(z &#61; Vy, expand &#61; 0.3, space &#61; 0.3, along &#61; "y", # expand &#61; 0.3&#xff0c;沿z轴压缩col &#61; ramp.col(col &#61; c("cyan", "magenta"), n &#61; 102, alpha &#61; 1),colkey &#61; list(width &#61; 0.5, length &#61; 0.5, cex.axis &#61; 0.8))


640?wx_fmt&#61;png

# 不筛选数据&#xff0c;设定along &#61; "xy", 形成网状条带。
x <- seq(-pi, pi, by &#61; 0.2)
y <- seq(-pi, pi, by &#61; 0.3)
grid <- mesh(x, y)
z <- with(grid, cos(x) * sin(y))ribbon3D(z &#61; z, x &#61; x, y &#61; y, along &#61; "xy", space &#61; 0.3,col &#61; ramp.col(col &#61; c("cyan", "magenta"), n &#61; 102, alpha &#61; 1))


640?wx_fmt&#61;png

3.3.2 contour和image参数增加平面图

library(plot3D)x <- seq(1, nrow(volcano), by &#61; 3)  # 同时筛选数据
y <- seq(1, ncol(volcano), by &#61; 3)Volcano <- volcano[x, y]
ribbon3D(z &#61; Volcano, zlim &#61; c(-100, 200), col &#61; ramp.col(col &#61; c("cyan", "magenta"), n &#61; 102, alpha &#61; 1), contour &#61; TRUE, image &#61; TRUE)  # 默认image图形颜色与条带一致


640?wx_fmt&#61;png

3.4

hist3D()

hist3D()特点&#xff1a;

  • 同样有space参数&#xff0c;但默认space &#61; 0。

  • 增加了一个opaque.top参数&#xff0c;用于指定bar顶面是否透明(当设定alpha时)&#xff0c;默认opaque.top &#61; FALSE不透明。

require(plot3D)data(VADeaths) # 一个城市与农村不同年龄&#xff0c;不同性别人口数量数据集,
head(VADeaths) # 行相当于x即年龄分布。# bty &#61; "g"表示灰色背景panels和白色grid
hist3D(z &#61; VADeaths,scale &#61; FALSE, expand &#61; 0.01, bty &#61; "g", theta &#61; 290, phi &#61; 20, # expand &#61; 0.01,z轴方向压缩 col &#61; "green", border &#61; "magenta", shade &#61; 0.2, ltheta &#61; -290,space &#61; 0.3, ticktype &#61; "detailed", d &#61; 2) # 设定柱子间隙为0.3, d&#61;2>1降低透视强度


640?wx_fmt&#61;png

3.4.1 增加3维文字text3D()

library(plot3D)hist3D (x &#61; 1:5, y &#61; 1:4, z &#61; VADeaths,bty &#61; "g", phi &#61; 20,  theta &#61; -60,xlab &#61; NA, ylab &#61; NA, zlab &#61; "", main &#61; "VADeaths", # main增加主标题col &#61; "green", border &#61; "magenta", shade &#61; 0.8,ticktype &#61; "detailed", space &#61; 0.15, d &#61; 2)# 添加3维文字&#xff0c;给x轴增加刻度标签
text3D(x &#61; 1:5, y &#61; rep(-0.3, 5), z &#61; rep(3, 5), # y相同&#xff0c;在x轴上增加刻度标签labels &#61; rownames(VADeaths),add &#61; TRUE, adj &#61; 0)# 添加3维文字&#xff0c;给y轴增加刻度标签
text3D(x &#61; rep(0.5, 4),   y &#61; 1:4, z &#61; rep(0, 4), # x相同labels  &#61; colnames(VADeaths),add &#61; TRUE, adj &#61; 1)


640?wx_fmt&#61;png

3.4.2 opaque.top设定顶面非透明

必须用alpha参数设定bar透明度
alpha从0(全透明)到1(不透明)。

library(plot3D)data(VADeaths) # 一个城市与农村不同年龄&#xff0c;不同性别人口数量数据集,
head(VADeaths) # 行相当于x即年龄分布。# 设定图形透明度为0.3, opaque.top &#61; TRUE表示顶部不透明
hist3D(z &#61; VADeaths,scale &#61; FALSE, expand &#61; 0.01, bty &#61; "g", theta &#61; 290, phi &#61; 20, # expand &#61; 0.01,z轴方向压缩 col &#61; "green", border &#61; "magenta", shade &#61; 0.2, ltheta &#61; -290, alpha &#61; 0.3, opaque.top &#61; TRUE, space &#61; 0.3, ticktype &#61; "detailed", d &#61; 2) # 设定柱子间隙为0.3, d&#61;2>1降低透视强度


640?wx_fmt&#61;png

640?wx_fmt&#61;png

····

往期精彩&#xff1a;

  • R_插值_拟合_回归_样条

  • R_circlize包_和弦图&#xff08;一&#xff09;

  • R_circlize包_和弦图&#xff08;二&#xff09;

  • R_ggplot2基础&#xff08;一&#xff09;

  • R_ggplot2基础&#xff08;二&#xff09;

  • R_ggplot2基础&#xff08;三&#xff09;

  • R_ggplot2基础&#xff08;四&#xff09;

  • R_3D图(一)

····

640?wx_fmt&#61;gif


640?wx_fmt&#61;jpeg

公众号后台回复关键字即可学习

回复 爬虫            爬虫三大案例实战  
回复 
Python       1小时破冰入门

回复 数据挖掘     R语言入门及数据挖掘
回复 
人工智能     三个月入门人工智能
回复 数据分析师  数据分析师成长之路 
回复 机器学习      机器学习的商业应用
回复 数据科学      数据科学实战
回复 常用算法      常用数据挖掘算法



推荐阅读
  • Leetcode学习成长记:天池leetcode基础训练营Task01数组
    前言这是本人第一次参加由Datawhale举办的组队学习活动,这个活动每月一次,之前也一直关注,但未亲身参与过,这次看到活动 ... [详细]
  • 最详尽的4K技术科普
    什么是4K?4K是一个分辨率的范畴,即40962160的像素分辨率,一般用于专业设备居多,目前家庭用的设备,如 ... [详细]
  • 最近遇到了一道关于哈夫曼树的编程题目,需要在下午之前完成。题目要求设计一个哈夫曼编码和解码系统,能够反复显示和处理多个项目,直到用户选择退出。希望各位大神能够提供帮助。 ... [详细]
  • vue引入echarts地图的四种方式
    一、vue中引入echart1、安装echarts:npminstallecharts--save2、在main.js文件中引入echarts实例:  Vue.prototype.$echartsecharts3、在需要用到echart图形的vue文件中引入:   importechartsfrom&amp;quot;echarts&amp;quot;;4、如果用到map(地图),还 ... [详细]
  • 三角测量计算三维坐标的代码_双目三维重建——层次化重建思考
    双目三维重建——层次化重建思考FesianXu2020.7.22atANTFINANCIALintern前言本文是笔者阅读[1]第10章内容的笔记,本文从宏观的角度阐 ... [详细]
  • 本文介绍如何使用OpenCV和线性支持向量机(SVM)模型来开发一个简单的人脸识别系统,特别关注在只有一个用户数据集时的处理方法。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • poj 3352 Road Construction ... [详细]
  • 在对WordPress Duplicator插件0.4.4版本的安全评估中,发现其存在跨站脚本(XSS)攻击漏洞。此漏洞可能被利用进行恶意操作,建议用户及时更新至最新版本以确保系统安全。测试方法仅限于安全研究和教学目的,使用时需自行承担风险。漏洞编号:HTB23162。 ... [详细]
  • 在Java项目中,当两个文件进行互相调用时出现了函数错误。具体问题出现在 `MainFrame.java` 文件中,该文件位于 `cn.javass.bookmgr` 包下,并且导入了 `java.awt.BorderLayout` 和 `java.awt.Event` 等相关类。为了确保项目的正常运行,请求提供专业的解决方案,以解决函数调用中的错误。建议从类路径、依赖关系和方法签名等方面入手,进行全面排查和调试。 ... [详细]
  • 使用Tkinter构建51Ape无损音乐爬虫UI
    本文介绍了如何使用Python的内置模块Tkinter来构建一个简单的用户界面,用于爬取51Ape网站上的无损音乐百度云链接。虽然Tkinter入门相对简单,但在实际开发过程中由于文档不足可能会带来一些不便。 ... [详细]
  • 兆芯X86 CPU架构的演进与现状(国产CPU系列)
    本文详细介绍了兆芯X86 CPU架构的发展历程,从公司成立背景到关键技术授权,再到具体芯片架构的演进,全面解析了兆芯在国产CPU领域的贡献与挑战。 ... [详细]
  • Python 序列图分割与可视化编程入门教程
    本文介绍了如何使用 Python 进行序列图的快速分割与可视化。通过一个实际案例,详细展示了从需求分析到代码实现的全过程。具体包括如何读取序列图数据、应用分割算法以及利用可视化库生成直观的图表,帮助非编程背景的用户也能轻松上手。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
author-avatar
书友58737112
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有