使用curve()绘制归一化至V_max的C-V_C曲线并显示均值点
需求与问题
我希望绘制一条以C值为X轴、V_C值为Y轴的曲线,同时将曲线归一化至V_max,并在曲线上以圆点形式显示均值。我尝试了以下代码:
V_max=15 H=1 n=1 C=c(0,0.01,0.1,1) fun <- function( C, H, n ){ 2 / (3 + (C / H)^n) } mylist <- list() for(i in 1:length(C)){ V_C <- V_max*fun(C[i],H,n) x3 <- rnorm(1000,V_C,1) mylist[i] <- mean(x3) } curve(fun, -10, 10, col ="red", ylab ="V_C")
期望输出的曲线是一条随C值增大而下降的平滑曲线,曲线上对应指定C值的位置有实心圆点标记均值。
修正方案
原代码存在未做归一化、X轴范围不符、未添加均值标记的问题,以下是修正后的代码:
V_max = 15 H = 1 n = 1 C = c(0, 0.01, 0.1, 1) # 定义基础函数 fun <- function(C, H, n) { 2 / (3 + (C / H)^n) } # 计算每个C对应的均值,用sapply替代循环更简洁 mean_vals <- sapply(C, function(c_val) { V_C <- V_max * fun(c_val, H, n) mean(rnorm(1000, V_C, 1)) }) # 绘制归一化后的平滑曲线,X轴范围匹配实际C值区间 curve(V_max * fun(x, H, n), from = min(C), to = max(C), col = "red", ylab = "V_C", xlab = "C", lwd = 2) # 添加实心圆点标记均值 points(C, mean_vals, pch = 19, col = "blue", cex = 1.2)
关键修改说明
- 曲线绘制时乘以
V_max,完成归一化要求 - 调整
curve()的from和to参数为C的最小/最大值,避免无效的X轴范围 - 使用
sapply替代循环,更高效计算各C值对应的均值 - 用
points()添加实心圆点(pch=19),匹配目标曲线的标记样式
内容的提问来源于stack exchange,提问作者daisydomnie
相关产品推荐
相关产品推荐

