我正在尝试使用ggplot绘制一个函数,我可以这样做。例如,y = x。我在-1和4之间绘图。很棒。在同一个图表上,我现在想要将曲线下面积区分为1到3.我无法使其工作,也无法找到任何文档。有人能帮助我吗?
我正在尝试的骨架代码:
eq<-function(x){(x)}
ggplot(data.frame(x=c(-1,4)),aes(x)) +
stat_function(fun=eq,geom="line",color="red") +
stat_function(fun=eq,geom="area",fill="blue")
我尝试了所有不同的排列。如果有办法将第二个stat_function限制到另一个域,它可能会起作用。有什么想法吗?
答案 0 :(得分:0)
似乎stat_function
正在处理所有数据,而不是提供的特定值。一种选择是首先生成要绘制的数据,然后将其传递给特定的geom_*
。但是,如果你真的想留在stat_function
,你可能需要做更多的工作。一种方法是创建两个函数,其中一个函数将输出限制在您想要的范围内。
eq<-function(x){(x)}
eqB<-function(x){ifelse(x < 3 & x > 0, x, NA)}
ggplot(data.frame(x=c(-1,4)),aes(x)) +
stat_function(fun=eq,geom="line",color="red") +
stat_function(fun=eqB,geom="area",fill="blue")
更强大的解决方案是创建一个接受范围限制的单个函数,然后使用args
传递这些函数:
eqC <- function(x,upr = max(x), lwr = min(x)){
ifelse(x <= upr & x >= lwr, x, NA)
}
ggplot(data.frame(x=c(-1,4)),aes(x)) +
stat_function(fun=eqC,geom="line",color="red") +
stat_function(fun=eqC,geom="area",fill="blue"
, args = list(upr = 3, lwr = 0))
这两个都会生成如下图: