之前我们绘制的属于二维散点图,具有两个维度通常是 x 轴和 y 轴)上展示数据点的分布。只能呈现两个变量之间的关系。而三维散点图则具有三个维度(x 轴、y 轴和 z 轴)上展示数据点的分布。可以同时呈现三个变量之间的关系,提供了更丰富的信息和更全面的视角。
从视觉效果来讲二维散点图较为平面和简洁,数据点的分布相对容易观察,但对于复杂的数据关系可能不够直观。三维散点图则更具有立体感,能够更生动地展示数据的分布情况。但由于增加了一个维度,可能会使数据点的分布显得更加复杂,需要一定的时间来适应和理解。
从数据分析能力角度来讲二维散点图适合分析两个变量之间的线性或非线性关系,如相关性、趋势等。可以通过添加趋势线、拟合曲线等方式进一步分析数据。三维散点图除了可以分析三个变量之间的关系外,还可以通过旋转、缩放等操作从不同角度观察数据,发现潜在的模式和异常值。但对于大规模数据集,三维散点图可能会显得拥挤,影响数据分析的效果。
从应用场景来讲二维散点图广泛应用于各种数据分析场景,尤其是当变量数量较少且关系相对简单时。例如,在经济学中分析收入和消费之间的关系,在生物学中分析两种生物指标之间的关系等。三维散点图则适用于需要同时考虑三个变量的情况,如物理学中的空间位置和时间关系、工程学中的多参数优化等。对于一些复杂的数据结构和高维数据的初步探索,三维散点图也可以提供一定的帮助。
0x01 使用scatterplot3d包
一、安装与加载R包
r
#安装scatterplot3d包
install.packages("scatterplot3d")
#加载scatterplot3d包
library(scatterplot3d)
二、准备数据
r
#生成三个包含50个随机数的向量x、y 和 z
x <- rnorm(50)
y <- rnorm(50)
z <- rnorm(50)
三、函数用法及参数说明
scatterplot3d(x, y, z,...)
1.
x
:这是必选参数,用于指定散点图中数据点在 x 轴上的坐标。可以是一个数值向量,表示数据点在 x 轴方向的位置。2.
y
:也是必选参数(如果x
是一个包含多个列的矩阵或数据框等复合数据结构时可省略),用于指定散点图中数据点在 y 轴上的坐标。与x
类似,是一个数值向量。3.
z
:必选参数,指定散点图中数据点在 z 轴上的坐标,同样为数值向量。4.
color
:用于指定数据点的颜色。可以是一个颜色向量,每个元素对应一个数据点的颜色;也可以是一个颜色名称字符串,所有数据点将使用该颜色。默认值为par("col")
,即使用当前绘图参数中的颜色设置。5.
col.axis
:用于指定坐标轴的颜色。例如,如果设置col.axis = "red"
,那么坐标轴将显示为红色。默认情况下,如果不指定该参数,坐标轴的颜色通常由当前的绘图设置决定。6.
col.grid
:用于指定三维散点图中网格线的颜色。例如,如果设置col.grid = "blue"
,那么网格线将显示为蓝色。默认情况下,如果不指定该参数,网格线的颜色通常由当前的绘图设置决定。7.
pch
:指定数据点的绘制符号。可以是一个整数值,选择预定义的绘图符号;也可以是一个字符,表示自定义的绘图符号。默认值为par("pch")
,即使用当前绘图参数中的绘图符号设置。8.
main
:设置图形的主标题,为字符串类型。如果不指定,将没有主标题。9.
sub
:副标题,同样为字符串类型。用于在图形下方添加一个副标题。10.
xlim
、ylim
、zlim
:分别用于设置 x 轴、y 轴、z 轴的取值范围。可以是一个包含两个元素的数值向量,分别表示轴的最小值和最大值。如果不指定,函数将根据数据自动确定轴的范围。11.
xlab
、ylab
、zlab
:分别为 x 轴、y 轴、z 轴的标签,用于描述轴所代表的变量含义。都是字符串类型。12.
scale.y
:y 轴相对于 x 轴和 z 轴的缩放比例。默认值为 1,表示 y 轴的缩放比例与 x 轴和 z 轴相同。可以根据需要调整该值来改变 y 轴的显示比例。13.
angle
:x 轴和 y 轴之间的角度。该角度会影响图形的视角,注意结果可能会受到缩放比例的影响。14.
axis
:逻辑值,用于指定是否绘制坐标轴。如果为TRUE
,将绘制坐标轴;如果为FALSE
,则不绘制坐标轴。默认值为TRUE
。15.
tick.marks
:逻辑值,指定是否在坐标轴上绘制刻度线。仅在axis = TRUE
时有效。默认值为TRUE
。16.
label.tick.marks
:逻辑值,指定是否在刻度线上添加标签。仅在axis = TRUE
且tick.marks = TRUE
时有效。默认值为TRUE
。17.
x.ticklabs
、y.ticklabs
、z.ticklabs
:用于指定 x 轴、y 轴、z 轴刻度线的标签向量。可以自定义刻度线的标签,而不是使用默认的数值标签。18.
y.margin.add
:在 y 轴的刻度标签和轴标签之间添加额外的空间。这是一个数值值,用于增加两者之间的间距。19.
y.axis.offset
:指定 y 轴刻度标签与轴的偏移量。默认值为 1,通过调整该值可以改变刻度标签的位置。20.
grid
:逻辑值,用于指定是否在图形中绘制网格线。如果为TRUE
,将绘制网格线;如果为FALSE
,则不绘制。默认值为TRUE
。21.
box
:逻辑值,用于指定是否在图形周围绘制边框。如果为TRUE
,将绘制边框;如果为FALSE
,则不绘制。默认值为TRUE
。22.
highlight.3d
:逻辑值,用于指定是否对数据点进行突出显示。如果为TRUE
,数据点的颜色将根据其在三维空间中的位置而变化,以增强立体感;如果为FALSE
,则使用指定的颜色绘制数据点。默认值为FALSE
。23.
mar
:一个数值向量,用于指定图形的边界大小,顺序为c(bottom, left, top, right)
。可以根据需要调整边界大小,以适应图形的显示。24.
bg
:指定图形的背景颜色。可以是一个颜色名称字符串,也可以是一个颜色值。默认值为par("bg"
),即使用当前绘图参数中的背景颜色设置。25.
type
:用于指定散点图中点的绘制类型。"p""点;"h"垂线;"s"三维曲面;"l"线。
四、绘制基本的三维散点图
r
scatterplot3d(x,y,z)
五、美化和调整
r
scatterplot3d(x,y,z,color = "darkred",pch = 2,col.axis = "darkgrey",col.grid = "lightgrey",main = "三维散点图",scale.y = 2,angle = 30,type = "h")
六、绘制分组三维散点图
r
# 从 1、2、3 中随机抽取 50 个数字(可重复),并转换为因子类型,作为分类变量 fac
fac <- as.factor(sample(1:3, 50, replace = TRUE))
# 将 x、y、z 和 fac 组合成一个数据框 data
data <- data.frame(x,y,z,fac)
# 使用 scatterplot3d 函数绘制三维散点图
# data$x、data$y、data$z 分别作为 x、y、z 轴的数据
# color = data$fac 表示根据 fac 这个分类变量来设置数据点的颜色
# pch = 16 指定数据点的绘制符号为实心圆
scatterplot3d(data$x,data$y,data$z,color = data$fac,pch = 16)
0x02 使用rgl包
如果需要绘制可旋转的三维散点图,可使用rgl
包中的plot3d()
函数。
一、安装与加载R包
r
#安装rgl包
install.packages("rgl")
#加载rgl包
library(rgl)
二、准备数据
r
x <- runif(100)
y <- runif(100)
z <- runif(100)
三、绘制可旋转的三维散点图
r
plot3d(x,y,z, col = "blue", size = 5)