如何在R中为自定义对数函数添加标记指定值的红色辅助线
R 绘制函数指定取值标记的实现方法
你可以通过求解函数对应取值的根、添加辅助线的方式完成标记,完整实现代码如下:
# 定义目标函数 l <- function(p) { log(p) + 3 * log(1 - p) } # 设定要标记的目标函数值 target_l <- -3.2 # 辅助函数:计算函数值与目标值的差,用于求根 root_fun <- function(p) { l(p) - target_l } # 求解对应p的区间:该单峰函数最大值在p=0.25处,分别在左右区间求根 p_left <- uniroot(root_fun, interval = c(0.01, 0.25))$root p_right <- uniroot(root_fun, interval = c(0.25, 0.99))$root # 绘制基础函数曲线 plot(l, 0, 1, ylim = c(-15, 0), main = "l(p) 函数取值标记示例", ylab = "l(p)") # 添加红色水平标记线 abline(h = target_l, col = "red", lwd = 2) # 添加对应p值的垂直标记线,从x轴延伸到函数曲线交点 segments(x0 = p_left, y0 = par("usr")[3], x1 = p_left, y1 = target_l, col = "red", lty = 2, lwd = 2) segments(x0 = p_right, y0 = par("usr")[3], x1 = p_right, y1 = target_l, col = "red", lty = 2, lwd = 2) # 在x轴标注p值区间 axis(side = 1, at = round(c(p_left, p_right), 3), col.axis = "red", font = 2) # 也可以添加文本标注说明区间 text(x = mean(c(p_left, p_right)), y = target_l + 0.5, labels = paste0("l(p) = ", target_l, "\np ∈ [", round(p_left,3), ", ", round(p_right,3), "]"), col = "red")
代码说明:
uniroot用于求解单变量函数的根,因为目标函数是单峰结构,我们在最大值点左右分别求解得到两个p值端点abline绘制指定y值的水平红线,lwd控制线条粗细segments绘制垂直虚线标记对应p值的位置,par("usr")[3]自动获取当前绘图区域的y轴最小值,保证垂直线延伸到x轴- 最后可以根据需要选择在x轴直接标注p值,或者添加文本框说明区间信息
内容的提问来源于stack exchange,提问作者Hermi
相关产品推荐
相关产品推荐

