如何在R语言3D绘图中实现所有点对的连线?
R语言实现3D全点对连线图的方法
你当前使用scatter3D(type = "b")只能按数据行顺序连接点(即绘制点的路径),无法实现所有点两两之间的连线。下面提供两种可行的解决方案:
方法一:基于plot3D包实现
通过生成所有点对的组合,再逐个绘制每对点之间的连线:
library(tidyverse) library(plot3D) # 构造数据 df <- data.frame(dim1 = rnorm(n = 20), dim2 = rnorm(n = 20), dim3 = rnorm(n = 20)) # 先绘制散点 scatter3D( x = df$dim1, y = df$dim2, z = df$dim3, pch = 20, xlab = "Dimension 1", ylab = "Dimension 2", zlab = "Dimension 3", phi = 40, bty = "b", cex = 2 ) # 生成所有不重复的点对索引 point_pairs <- combn(nrow(df), 2) # 遍历每个点对,绘制连线 for (i in 1:ncol(point_pairs)) { idx1 <- point_pairs[1, i] idx2 <- point_pairs[2, i] lines3D( x = c(df$dim1[idx1], df$dim1[idx2]), y = c(df$dim2[idx1], df$dim2[idx2]), z = c(df$dim3[idx1], df$dim3[idx2]), col = "gray", # 用灰色区分点和线 lwd = 0.5 ) }
方法二:基于rgl包实现(支持3D交互)
rgl包提供了交互式的3D绘图功能,实现全点对连线更高效:
library(rgl) library(tidyverse) # 构造数据 df <- data.frame(dim1 = rnorm(n = 20), dim2 = rnorm(n = 20), dim3 = rnorm(n = 20)) # 绘制3D散点 plot3d( x = df$dim1, y = df$dim2, z = df$dim3, pch = 20, size = 2, xlab = "Dimension 1", ylab = "Dimension 2", zlab = "Dimension 3", col = "black" ) # 生成所有点对的坐标矩阵 point_pairs <- combn(nrow(df), 2) segments_x <- df$dim1[point_pairs] segments_y <- df$dim2[point_pairs] segments_z <- df$dim3[point_pairs] # 批量绘制所有连线 segments3d( x = segments_x, y = segments_y, z = segments_z, col = "gray", lwd = 0.5 )
内容的提问来源于stack exchange,提问作者Ladislas Nalborczyk
相关产品推荐
相关产品推荐

