stat_function从函数生成扁平线

时间:2014-10-20 15:19:26

标签: r ggplot2

我有以下代码:

library("ggplot2")

f <- function(x)
{
    if (x >= 2) {-1 + x + 0.3}
    else {0}    
}

graph <- ggplot(data.frame(x = c(0, 10)), aes(x))
graph <- graph + stat_function(fun=f)
print(graph)

意外地产生了以下图表:

enter image description here

但是当我自己使用该函数时,结果是预期的:

> f(1)
[1] 0
> 
> f(3)
[1] 2.3
> 
> f(7)
[1] 6.3

怎么回事?

1 个答案:

答案 0 :(得分:5)

请注意以下警告:

> f(c(0,10))
[1] 0
Warning message:
In if (x >= 2) { :
  the condition has length > 1 and only the first element will be used

c(0,10)中的第一个元素不大于或等于2,并且由于您的函数不是设计为对值向量进行操作,因此它仅评估第一个元素并返回单个{{1} } - 这是您对0的调用所显示的内容。这实际上给出了与上面相同的警告信息:

print(graph)

您只需要对您的函数进行矢量化:

> plot(graph)
Warning message:
In if (x >= 2) { :
  the condition has length > 1 and only the first element will be used

enter image description here