plot3D

编程入门 行业动态 更新时间:2024-10-11 17:23:21

plot3D

plot3D


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

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


本篇推文介绍几种常见的图形在plot3D工具包中的绘制函数。目录如下:

  • 线段

  • 箭头

  • 矩形

  • 长方体

  • 箱线

  • 多边形

  • add参数

library(plot3D)

线段

graphcis工具包里绘制线段的函数是segments(),对应到plot3D工具包的函数就是segments3D()segments2D()

参数中,x0y0z0表示线段起点的坐标,x1y1z1表示线段终点的坐标。可以使用向量同时绘制多个线段。

x0 <- c(-0.8, 0.8,  0.8, -0.8)
x1 <- c( 0.8, 0.8, -0.8, -0.8)y0 <- c(-0.8, -0.8, 0.8,  0.8)
y1 <- c(-0.8,  0.8, 0.8, -0.8)z0 <- c(0, 0, 0, 0)
z1 <- z0segments3D(x0, y0, z0, x1, y1, z1,covar = x0, col = gg.col(4),lwd = 2)
segments2D(x0, y0, x1, y1, col = gg.col(4),lwd = 2)

箭头

graphcis工具包里绘制箭头的函数是arrows(),对应到plot3D工具包的函数就是arrows3D()arrows2D()

参数含义同segments3D()函数。

arrows3D(x0, y0, z0, x1, y1, z1,covar = x0, col = gg.col(4),lwd = 2)
arrows2D(x0, y0, x1, y1,col = gg.col(4),lwd = 2)

矩形

graphcis工具包里绘制矩形的函数是rect()。这里的矩形并不是任意形式的矩形,而是四条边都与x、y轴平行或垂直的矩形,因此在绘制时只需要提供其中一个对角线的两个端点的坐标即可确定矩形位置。

对应到plot3D工具包的函数就是rect3D(),它只能绘制与x-y平面、x-z平面和y-z平面的其中一个平面平行的矩形。

参数中,x0y0z0表示对角线起点端点的坐标,x1y1z1表示对角线终点端点的坐标。为了保证矩形平行于x-y平面、x-z平面和y-z平面中的一个,x1y1z1的其中一个必须设置为NULL。例如,若z1 = NULL,则矩形平行于x-y平面。可以使用向量同时绘制多个矩形。

par(mfrow = c(1,2))
rect3D(0,0,1,1,1, col = "red", border = "blue", lwd = 2)rect3D(0,1,1,1, z1 = 0, col = "blue", border = "red", lwd = 2,)

长方体

绘制长方体的函数是box3D()

参数中,x0y0z0表示体对角线起点端点的的坐标,x1y1z1表示体对角线终点端点的的坐标。

box3D(x0 = -0.8, y0 = -0.8, z0 = -0.8, x1 =  0.8, y1 =  0.8, z1 =  0.8, col = "red", border = "black", lwd = 2)

读者可能会发现,这里绘制的长方体和常见的直观图效果并不一样。这是因为plot3D工具包绘制的是透视图,它使用的是点光源,遵循的原则是“近大远小”,平行关系会被改变;而绘制直观图使用的是平行光源,其不会改变平行关系。

设置phi = 90表示从正上方俯视长方体,效果如下:

box3D(x0 = -0.8, y0 = -0.8, z0 = -0.8, x1 =  0.8, y1 =  0.8, z1 =  0.8, col = "red", border = "black", lwd = 2,phi = 90, alpha = 0.5)

上面俯视图正体现了透视图“近大远小”的特点。在直观图下,长方体的俯视图应是一个矩形,而在透视图下,上顶面较近、下底面较远,因此俯视图就会出现出两个矩形,两个矩形顶点间的连线表达了由近到远的变化。

箱线

box3D()函数的用法类似,但是绘制的是长方体的边线。

border3D(x0 = -0.8, y0 = -0.8, z0 = -0.8, x1 =  0.8, y1 =  0.8, z1 =  0.8,col = "red")

多边形

polygon3D()函数在三维空间里,依次连接各点形成一个闭合的多边形。xyz使用向量依次表示各点在三个维度下的坐标。

polygon3D(x = c(1, 0, 0, 1),y = c(0, 0, 1, 1),z = c(0, 1, 1, 0),col = "red", border = "black", lwd = 2, alpha = 0.4)

add参数

因为每个图形绘制函数都有add参数,因此可以很方便地在同一坐标系下进行图形叠加。

以下示例来自函数帮助文档:

xx <- yy <- seq(-0.8, 0.8, by = 0.2)
zz <- seq(-0.8, 0.8, by = 0.8)M <- mesh(xx, yy, zz)
x0 <- M$x; y0 <- M$y; z0 <- M$z
x1 <- x0 + 0.1Col <- c("red", "blue", "green") 
arrows3D(x0, y0, z0, x1 = x1, colvar = z0, lwd = 2, d = 2, clab = "z-value", col = Col, length = 0.1,xlim = c(-0.8, 0.8), ylim = c(-0.8, 0.8),main = "arrows3D, points3D, segments3D, border3D")# add starting point of arrows
points3D(x0, y0, z0, add = TRUE, colvar = z0, colkey = FALSE, pch = ".", cex = 3, col = Col)# use segments to add section
x0 <- c(-0.8, 0.8,  0.8, -0.8)
x1 <- c( 0.8, 0.8, -0.8, -0.8)y0 <- c(-0.8, -0.8, 0.8, -0.8)
y1 <- c(-0.8,  0.8, 0.8, 0.8)z0 <- c(0., 0., 0., 0.)
segments3D(x0, y0, z0, x1, y1, z1 = z0,add = TRUE, col = "black", lwd = 2)# add a box 
border3D(-0.8, -0.8, -0.8, 0.8, 0.8, 0.8,col = "orange", add = TRUE, lwd = 3)

更多推荐

plot3D

本文发布于:2024-03-13 22:29:26,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1735015.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:plot3D

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!