如何在R语言的正态分布图像中于曲线与竖线交点处绘制水平线
在R语言中给正态分布曲线与竖线交点添加水平线的实现方法
你需要在已绘制的正态分布曲线与指定竖线的交点位置,绘制水平线到目标位置,以下是修改后的完整代码及关键说明:
完整代码
# 先定义均值mu和标准差s的示例值,可按需修改 mu <- 30 s <- 10 colorArea <- function(from, to, density, ..., col=NULL, dens=NULL){ y_seq <- seq(from, to, length.out=500) d <- c(0, density(y_seq, ...), 0) polygon(c(from, y_seq, to), d, col=col, density=dens) } # 绘制正态分布曲线 curve(dnorm(x, mean=mu, sd=s), from = -10, to = 80, xlab="x", ylab="f(x)", xaxt='n') # 计算各竖线与曲线交点的纵坐标(正态分布密度值) y_mu <- dnorm(mu, mean=mu, sd=s) y_mu_minus_s <- dnorm(mu - s, mean=mu, sd=s) y_mu_plus_s <- dnorm(mu + s, mean=mu, sd=s) # 绘制水平线:从曲线起始点到对应竖线位置,纵坐标为交点值 segments(x0 = -10, y0 = y_mu, x1 = mu, y1 = y_mu, col='red', lty=2) segments(x0 = -10, y0 = y_mu_minus_s, x1 = mu - s, y1 = y_mu_minus_s, col='blue', lty=2) segments(x0 = -10, y0 = y_mu_plus_s, x1 = mu + s, y1 = y_mu_plus_s, col='blue', lty=2) # 绘制原有的竖线 abline(v=mu, col='red', lty=1) abline(v=mu-(s), col='blue', lty=3) abline(v=mu+(s), col='blue', lty=3) # 图例设置 legend("topright", legend = c("", ""), title = expression(paste("N(",mu,",",sigma,")")), title.adj = 0, lty = 0, lwd = 0, box.lty = 0 ) axis(1, at=mu) box()
关键步骤说明
- 参数初始化:先明确
mu和s的具体值,否则原代码无法正常运行 - 计算交点纵坐标:通过
dnorm()函数直接获取各竖线位置对应的正态分布密度值,这就是曲线与竖线交点的y值 - 绘制水平线:使用
segments()函数指定水平线的起始x(这里设为曲线绘制的起点-10)、y值,终点x为对应竖线的位置,y值与起点保持一致。如果需要水平线延伸到y轴(x=0),将x0改为0即可
内容的提问来源于stack exchange,提问作者Amelia
相关产品推荐
相关产品推荐

