寻求支持多类别符号与轴标签的3D散点图R绘图工具
3D散点图:分类符号与轴标注的解决方案
方案1:改进rgl原生用法
rgl的plot3d并非完全不支持多形状,只是无法直接全局设置pch,可以先创建带轴标注的空画布,再按分组逐个添加不同形状的点:
library(rgl) set.seed(123) # 生成示例数据 data <- data.frame( x = rnorm(100), y = rnorm(100), z = rnorm(100), group = factor(sample(1:3, 100, replace = TRUE)) ) # 创建带轴标签的空3D绘图 plot3d( data$x, data$y, data$z, type = "n", # 不绘制默认点 xlab = "X轴", ylab = "Y轴", zlab = "Z轴", main = "分类3D散点图" ) # 按分组添加不同形状的点 shape_list <- c(1, 2, 16) # 自定义每组对应的pch符号 color_list <- c("darkred", "steelblue", "forestgreen") for (i in seq_along(levels(data$group))) { group_data <- subset(data, group == levels(data$group)[i]) points3d( group_data$x, group_data$y, group_data$z, pch = shape_list[i], col = color_list[i], size = 2 ) }
方案2:使用plotly(推荐,交互性强)
plotly支持直接将分组映射到标记符号,同时自动生成完整的轴标签、刻度,还支持拖拽旋转等交互操作:
library(plotly) set.seed(123) data <- data.frame( x = rnorm(100), y = rnorm(100), z = rnorm(100), group = factor(sample(1:3, 100, replace = TRUE)) ) # 定义分组对应的符号 symbol_mapping <- c("circle", "square", "diamond") names(symbol_mapping) <- levels(data$group) plot_ly(data, x = ~x, y = ~y, z = ~z, type = "scatter3d", mode = "markers", marker = list( symbol = ~symbol_mapping[group], size = 5, color = ~group )) %>% layout( scene = list( xaxis = list(title = "X轴"), yaxis = list(title = "Y轴"), zaxis = list(title = "Z轴") ), title = "分类3D散点图" )
方案3:使用lattice的cloud函数
适合生成静态3D图,语法简洁,原生支持分组符号和轴标注:
library(lattice) set.seed(123) data <- data.frame( x = rnorm(100), y = rnorm(100), z = rnorm(100), group = factor(sample(1:3, 100, replace = TRUE)) ) cloud(z ~ x * y, data = data, groups = group, pch = c(1, 2, 16), # 每组对应的符号 col = c("darkred", "steelblue", "forestgreen"), xlab = "X轴", ylab = "Y轴", zlab = "Z轴", main = "分类3D散点图")
内容的提问来源于stack exchange,提问作者Max
相关产品推荐
相关产品推荐

