R语言:修正for循环代码,计算均值并在直方图中显示均值标记
修正后的R代码:直方图叠加均值标记
V_max = 10 V_min = 0 n = 1 H = 1 C = c(0, 0.01, 0.1, 1) # 定义统一的x轴范围,避免子图刻度混乱 x_lim_min = V_min - 2 x_lim_max = V_max + 2 par(mfrow = c(length(C), 1), mar = c(2, 5, 2, 0), oma = c(1, 0, 0, 0)) V <- function(C, H, n) { 1 / (1 + (C / H)^n) } for(i in 1:length(C)){ V_C <- V_max * V(C[i], H, n) x <- rnorm(1000, V_C, 1) # 计算当前数据集的均值 x_mean <- mean(x) y <- hist(x, plot = FALSE, breaks = 20) # 绘制直方图,添加标题和坐标轴标签 plot(y, col = 'black', xlim = c(x_lim_min, x_lim_max), main = paste("C =", C[i]), xlab = "数值", ylab = "频数") # 在均值位置绘制半透明红色条形 rect(xleft = x_mean - 0.1, xright = x_mean + 0.1, ybottom = 0, ytop = max(y$counts), col = rgb(1, 0, 0, 0.5), border = NA) # 添加均值数值标注 text(x = x_mean, y = max(y$counts)*0.9, labels = paste("均值:", round(x_mean, 2)), col = "white", font = 2) }
关键改动说明
- 补上了原始代码中缺失的
x_lim_min和x_lim_max,确保所有子图的x轴范围统一,避免视觉混乱 - 在循环内新增
x_mean <- mean(x),直接计算当前生成数据集的均值 - 使用
rect()函数在均值位置绘制半透明红色条形,宽度设为0.2,高度覆盖直方图的最大频数,清晰标记均值位置 - 额外添加了均值的数值标注,不用手动计算就能直观看到具体数值
- 调整了
par()的参数:把原本多余的length(C)+1改成length(C)(去掉了空行),同时优化边距让y轴的频数标签正常显示 - 给每个直方图添加了标题,标注对应的C值,方便区分不同子图
内容的提问来源于stack exchange,提问作者user20501829
相关产品推荐
相关产品推荐

