在R语言中如何绘制包含篮球主客场得分及密度的3D图?
R语言篮球主客场得分3D密度可视化实现思路
你需要实现的是主客场得分双变量联合分布的3D密度图,参考效果如下:
具体实现可以按以下步骤走:
- 数据预处理
先整理数据集,至少保留主场得分、客场得分两列数值字段,提前过滤掉无效的异常值(比如负得分、超出合理范围的极端值)。 - 依赖包选型
二维密度计算用MASS包的kde2d()即可,3D渲染可选两类包:- 要交互式可旋转的3D效果选
rgl包 - 要静态出版级固定效果选
plot3D包
- 要交互式可旋转的3D效果选
- 核心密度计算
调用kde2d(主场得分列, 客场得分列)做二维核密度估计,输出X(主场得分区间网格)、Y(客场得分区间网格)、Z(对应网格的密度值)三个矩阵,是3D绘图的核心数据源。 - 3D图绘制
以rgl包为例,核心代码逻辑如下:# 加载包 library(MASS) library(rgl) library(RColorBrewer) # 示例模拟数据,替换成你自己的真实数据 set.seed(123) 主场得分 <- rnorm(1000, mean = 95, sd = 10) 客场得分 <- rnorm(1000, mean = 93, sd = 9) bk_data <- data.frame(主场得分, 客场得分) # 计算二维核密度 dens <- kde2d(bk_data$主场得分, bk_data$客场得分, n = 50) # 设置颜色映射 col_pal <- colorRampPalette(rev(brewer.pal(9, "YlOrRd")))(100) z_col <- cut(dens$z, 100, labels = col_pal) # 绘制3D密度曲面 persp3d(dens$x, dens$y, dens$z, xlab = "主场得分", ylab = "客场得分", zlab = "密度", col = as.character(z_col), alpha = 0.8) # 可选:叠加原始得分点在z=0平面 points3d(bk_data$主场得分, bk_data$客场得分, 0, col = "black", size = 3) - 效果调整
- 调整
kde2d()的h参数可以修改密度平滑度,带宽越小分布峰越锐利 - 调整
alpha参数可以修改曲面透明度,方便观察底层分布 - 调用
rgl.snapshot()可以导出当前3D图为本地图片文件
- 调整
内容的提问来源于stack exchange,提问作者Giorgos
相关产品推荐
相关产品推荐

