除了一个可调参数外,我有一系列相同的函数,我想在一组轴上绘制所有这些函数,所有这些函数都叠加在一起.例如,这可能是sin(n*x),具有n的各种值,比如说1:30,我不想单独输出每个命令 - 我想应该有一些方法可以做到这一点编程.
library(ggplot2)
Run Code Online (Sandbox Code Playgroud)
将trig函数定义为频率的函数:sin(x),sin(2x),sin(3x)等.
trigf <- function(i)(function(x)(sin(i*x)))
Run Code Online (Sandbox Code Playgroud)
叠加两个功能图 - 当然这是手动的
ggplot(data.frame(x=c(0,pi)), aes(x)) + stat_function(fun=trigf(1)) + stat_function(fun=trigf(2))
Run Code Online (Sandbox Code Playgroud)
现在尝试概括 - 我的想法是使用一个stat_functions列表 lapply
plotTrigf <- lapply(1:5, function(i)(stat_function(fun=function(x)(sin(i*x))) ))
Run Code Online (Sandbox Code Playgroud)
尝试手动使用列表的元素,但它并没有真正起作用 - 只显示了i=5图表,我不知道为什么不是我引用的那个
ggplot(data.frame(x=c(0,pi)), aes(x)) +plotTrigf[[1]] + plotTrigf[[2]]
Run Code Online (Sandbox Code Playgroud)
我认为这Reduce可能会处理添加到a的'generalized sum' ggplot()但它不起作用 - 它抱怨二元运算符的非数字参数
Reduce("+", plotTrigf)
Run Code Online (Sandbox Code Playgroud)
所以我在执行这个策略时都会遇到困难,或者可能还有其他一些方法可以做到这一点.
我正在尝试使用以向量元素表示的公式.但是,在构建公式时,元素不会被替换; 相反,它是作为一个组件留下的 - 我更愿意,如果实际值立即被替换.(这会在代码中稍后打破其他内容.)
c <- c(5:8) #made a vector on purpose, even though only use c[1]
form <- as.formula(y ~ exp(-(x-c[1])^2/2))
Run Code Online (Sandbox Code Playgroud)
在这一点上form包含,y ~ exp(-(x - c[1])^2/(2))但我希望它包含y ~ exp(-(x - 5)^2/(2)).