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

如何在R语言的散点图上叠加自定义函数曲线

如何在R语言的散点图上叠加自定义函数曲线

嗨,看起来你已经搞定了散点图的绘制,现在想要叠加一条类似y=C/ln(x)的自定义函数曲线对吧?这在R里其实挺简单的,我来一步步教你怎么做,还会给你一些实用的小提示~

方法一:基于基础绘图系统(和你当前代码匹配)

你现在用的是R的基础plot()函数,那我们就顺着这个思路来:

  1. 先生成绘制曲线需要的x序列
    因为ln(x)在x=0的时候是没有意义的,所以我们要避开0,生成覆盖你散点图x范围(1到2000)的足够多的点,这样曲线才会平滑:
# 生成从1到2000的1000个均匀分布的点,数量越多曲线越平滑
curve_x <- seq(from = 1, to = 2000, length.out = 1000)
  1. 定义你的函数并计算对应的y值
    先选一个初始的常数C(比如我先设成50,你之后可以根据手绘线的趋势反复调整),然后计算每个x对应的y值:
# 设定常数C,你可以随时修改这个值来匹配你的需求
C <- 50
# 计算y值:R里的log()默认是自然对数(也就是ln),如果是常用对数就用log10()
curve_y <- C / log(curve_x)
  1. 把曲线叠加到已有的散点图上
    在你画完散点图之后,直接用lines()函数就能把曲线加上去,还能设置颜色和线条粗细:
# 叠加红色曲线,lwd控制线条宽度,col设置颜色
lines(x = curve_x, y = curve_y, col = "red", lwd = 2)

把这些步骤整合到你的代码里,完整代码就是这样:

# 查看数据(这步可选,方便你确认数据)
View(DataCollection)

# 绘制散点图
plot(x=DataCollection$`x`, y= DataCollection$`y`,
     xlab = "x",
     ylab = "y",
     xlim = c(0, 2000),
     ylim = c(0, 100),
     pch=20,
     cex=0.2,
     main = "y against x"
)

# 生成曲线的x序列
curve_x <- seq(from = 1, to = 2000, length.out = 1000)

# 设定常数C,按需修改
C <- 50

# 计算曲线的y值
curve_y <- C / log(curve_x)

# 叠加红色曲线
lines(x = curve_x, y = curve_y, col = "red", lwd = 2)

一些实用小提示

  • 调整C值的小技巧:你不用每次都重新画散点图,只要修改C的值,然后重新运行计算curve_y和lines()的代码就行,这样能快速找到最合适的C。
  • 对数函数的注意事项:如果你的函数是基于常用对数(以10为底),记得把log()改成log10()。
  • 如果想用ggplot2(更灵活的绘图工具):如果你之后想换用ggplot2,也可以这样实现:
library(ggplot2)

# 先加载ggplot2包,如果没安装过先运行install.packages("ggplot2")
ggplot(DataCollection, aes(x = `x`, y = `y`)) +
  geom_point(pch=20, size=0.2) +  # 绘制散点
  stat_function(fun = function(x) C / log(x), color = "red", size = 1) +  # 叠加函数曲线
  xlim(0, 2000) +
  ylim(0, 100) +
  labs(x = "x", y = "y", title = "y against x")

ggplot2会自动处理x=0的无意义点,不用额外担心。

备注:内容来源于stack exchange,提问作者Mith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 08:42:59