如何使用R绘制标记指定Z分数区域的正态分布曲线图
R语言绘制标记指定Z分数对应区域的正态分布曲线图方案
以下针对均值为0、标准差为1的标准正态分布,标记Z=-1.35对应区域的需求,提供两种实现方法:
方法1:使用R基础绘图系统实现
无需额外安装依赖包,直接运行以下代码即可生成目标图形:
# 定义参数 mean_val <- 0 sd_val <- 1 target_z <- -1.35 # 生成正态分布数据 x <- seq(-4, 4, length.out = 1000) y <- dnorm(x, mean = mean_val, sd = sd_val) # 绘制正态分布曲线 plot(x, y, type = "l", lwd = 2, xlab = "Z分数", ylab = "概率密度", main = "标准正态分布区域标记") # 填充Z分数左侧区域 x_fill <- c(min(x), x[x <= target_z], target_z) y_fill <- c(0, y[x <= target_z], 0) polygon(x_fill, y_fill, col = "skyblue", border = NA) # 添加Z分数参考线 abline(v = target_z, col = "red", lwd = 2, lty = 2) # 添加区域概率标注 area_p <- round(pnorm(target_z, mean = mean_val, sd = sd_val), 4) text(target_z - 0.3, 0.2, labels = paste0("P(Z < ", target_z, ") = ", area_p), col = "red", pos = 2)
如果需要标记Z分数右侧的区域,只需要将代码中x <= target_z替换为x >= target_z,同时将pnorm函数的lower.tail参数设置为FALSE即可。
方法2:使用ggplot2实现(可视化效果更美观)
需要先安装加载ggplot2包,代码如下:
# 安装包(首次使用执行) # install.packages("ggplot2") library(ggplot2) # 定义参数 mean_val <- 0 sd_val <- 1 target_z <- -1.35 # 生成数据 df <- data.frame( x = seq(-4, 4, length.out = 1000) ) df$y <- dnorm(df$x, mean = mean_val, sd = sd_val) # 绘制图形 ggplot(df, aes(x = x, y = y)) + geom_line(linewidth = 1) + # 填充指定区域 geom_ribbon(data = subset(df, x <= target_z), aes(ymin = 0, ymax = y), fill = "skyblue", alpha = 0.7) + # 添加Z分数参考线 geom_vline(xintercept = target_z, color = "red", linewidth = 1, linetype = "dashed") + # 添加概率标注 annotate("text", x = target_z - 0.5, y = 0.2, label = paste0("P(Z < ", target_z, ") = ", round(pnorm(target_z), 4)), color = "red") + # 调整标签和主题 labs(x = "Z分数", y = "概率密度", title = "标准正态分布区域标记") + theme_minimal()
如果需要适配非标准正态分布,只需修改mean_val和sd_val的取值即可。
内容的提问来源于stack exchange,提问作者SpicyChicken
相关产品推荐
相关产品推荐

