请求协助在R中绘制符合要求的双二维正态分布等高线图
修正后的二维正态分布等高线图R代码
完整可运行代码
library(ggplot2) library(mvtnorm) # 定义分布参数 mu1 <- c(0, 0) mu2 <- c(2*sqrt(2), 2*sqrt(2)) sigma1 <- matrix(c(2, 0, 0, 2), nrow = 2) # 修正原代码的.0为0,消除语法歧义 sigma2 <- matrix(c(2, 1.2, 1.2, 2), ncol = 2) # 生成网格数据 data.grid <- expand.grid(s.1 = seq(-6, 10, length.out = 100), s.2 = seq(-6, 10, length.out = 100)) # 计算两个分布的概率密度 q.samp1 <- cbind(data.grid, prob = mvtnorm::dmvnorm(data.grid, mean = mu1, sigma = sigma1)) q.samp2 <- cbind(data.grid, prob = mvtnorm::dmvnorm(data.grid, mean = mu2, sigma = sigma2)) # 修正data.grid1笔误 # 绘制等高线图 ggplot() + # 第一个分布的等高线 stat_contour(data = q.samp1, aes(x = s.1, y = s.2, z = prob), color = 'red', bins = 12) + # 第二个分布的等高线 stat_contour(data = q.samp2, aes(x = s.1, y = s.2, z = prob), color = 'green', bins = 12) + # 标注第一个分布的均值点 geom_point(aes(x = mu1[1], y = mu1[2]), color = 'red', size = 3, shape = 19) + # 标注第二个分布的均值点 geom_point(aes(x = mu2[1], y = mu2[2]), color = 'green', size = 3, shape = 19) + # 设置坐标轴标签(修正slop拼写错误) xlab("Random slope") + ylab("Random intercept") + # 简洁专业主题 theme_bw()
关键修正说明
- 变量名笔误修复:原代码中
q.samp2里的data.grid1是错误变量名,改为正确的data.grid - 参数冲突解决:移除
stat_contour中同时存在的bins和binwidth,避免参数冲突警告,统一用bins控制等高线数量 - 语法歧义修正:把
sigma1中的.0改为0,消除潜在的语法解析问题 - 均值点优化:给两个均值点设置与对应等高线匹配的颜色,增大尺寸并使用实心圆点,让分布中心更醒目
- 标签拼写修正:将坐标轴标签"Random slop"修正为正确的"Random slope"
- 主题优化:添加
theme_bw()替换默认主题,让图表更清晰专业
内容的提问来源于stack exchange,提问作者saleh din
相关产品推荐
相关产品推荐

