You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 20:45:03