如何在R语言中绘制二维正态分布的透明线框图
用R复刻二维正态分布的透明线框图
不管是3D线框还是2D等高线风格的透明效果,都可以通过R的绘图包快速实现,以下是两种场景的具体代码:
第一步:生成二维正态分布数据
先准备绘图所需的密度数据:
library(mvtnorm) set.seed(123) # 固定随机种子保证结果可复现 # 创建网格点 x <- seq(-3, 3, length.out = 50) y <- seq(-3, 3, length.out = 50) grid_df <- expand.grid(x = x, y = y) # 计算二维正态分布密度 z_vals <- dmvnorm(grid_df, mean = c(0, 0), sigma = matrix(c(1, 0.5, 0.5, 1), nrow = 2)) z_matrix <- matrix(z_vals, nrow = 50, ncol = 50) # 转成矩阵用于3D绘图
方法1:3D透明线框图(静态/交互式)
静态版本(lattice包)
lattice的wireframe可以快速生成静态透明线框,通过rgb()函数控制线条透明度:
library(lattice) wireframe(z_matrix, xlab = "X", ylab = "Y", zlab = "Density", scales = list(arrows = FALSE), # 去掉轴箭头更简洁 col = rgb(0, 0, 1, alpha = 0.3), # alpha控制透明度,0全透明1不透明 lwd = 0.8) # 调整线条粗细
交互式版本(rgl包)
如果需要可旋转查看的3D图,用rgl包的wire3d:
library(rgl) open3d() # 打开3D窗口 wire3d(x, y, z_matrix, color = "royalblue", alpha = 0.3, # 直接设置透明度 lwd = 1) axes3d() # 添加坐标轴 title3d(xlab = "X", ylab = "Y", zlab = "Density")
方法2:2D透明等高线(线框风格的2D呈现)
如果只需要2D效果,用ggplot2的geom_contour设置透明度即可:
library(ggplot2) ggplot(grid_df, aes(x = x, y = y, z = z_vals)) + geom_contour(color = "royalblue", alpha = 0.4, size = 0.8) + theme_minimal() + labs(x = "X", y = "Y", title = "2D Transparent Contours of Bivariate Normal")
关键注意点
- 透明度参数:不同包的实现略有差异,lattice通过
rgb()的alpha分量控制,rgl和ggplot2直接用alpha参数。 - 线条粗细:通过
lwd(lattice/rgl)或size(ggplot2)调整,适配透明效果的视觉舒适度。
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

