如何在R语言的散点图上叠加自定义函数曲线
如何在R语言的散点图上叠加自定义函数曲线
嗨,看起来你已经搞定了散点图的绘制,现在想要叠加一条类似y=C/ln(x)的自定义函数曲线对吧?这在R里其实挺简单的,我来一步步教你怎么做,还会给你一些实用的小提示~
方法一:基于基础绘图系统(和你当前代码匹配)
你现在用的是R的基础plot()函数,那我们就顺着这个思路来:
- 先生成绘制曲线需要的x序列
因为ln(x)在x=0的时候是没有意义的,所以我们要避开0,生成覆盖你散点图x范围(1到2000)的足够多的点,这样曲线才会平滑:
# 生成从1到2000的1000个均匀分布的点,数量越多曲线越平滑 curve_x <- seq(from = 1, to = 2000, length.out = 1000)
- 定义你的函数并计算对应的y值
先选一个初始的常数C(比如我先设成50,你之后可以根据手绘线的趋势反复调整),然后计算每个x对应的y值:
# 设定常数C,你可以随时修改这个值来匹配你的需求 C <- 50 # 计算y值:R里的log()默认是自然对数(也就是ln),如果是常用对数就用log10() curve_y <- C / log(curve_x)
- 把曲线叠加到已有的散点图上
在你画完散点图之后,直接用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
相关产品推荐
相关产品推荐

