绘制R中两个函数的图形

时间:2017-09-01 22:30:00

标签: r plot ggplot2

我试图在同一个图表上绘制两个函数(即2x + 1和3x - 0.5 * x ^ 2)的图形,但是有两个不同的范围(分别为x <= 3和x> 3) )。到目前为止,我已经定义了两个函数如下:

# Define first function with given range
Line1 <- function(x) {
    if (x <= 3) {
        (3*x) + 1 } else {
    }       
}

# Define second function with given range
Line2 <- function(x) {
    if (x > 3) {
        2*x - (0.5*(x^2)) } else {
    }         
}

# Plot functions
ggplot(d,aes(x=x)) + stat_function(fun=rwrap(Line1,0,3),geom="line",col="blue") 
+ stat_function(fun=rwrap(Line2,3,5),geom="line",col="red")`

当我运行代码时,收到以下错误消息:

  

错误:提供给连续刻度的离散值另外:

     

警告讯息:
  1:在if(x <= 3){:条件具有长度> 1   并且只使用第一个元素   2:在if(x> 3){:the   条件的长度> 1,只使用第一个元素

我试图对其进行排查,但此时我只是迷失了方向。

1 个答案:

答案 0 :(得分:0)

问题是你的功能没有矢量化。他们将在x处使用单个值,但Line1(0:10)将不起作用。

使用ifelse if{}else{}的矢量化版本制作单个矢量化函数:

foo = function(x) {
    ifelse(x <= 3, 3 * x + 1, 2 * x - 0.5 * x ^ 2)
 }

你可以这样打破它:

bar = function(x) 3 * x + 1
baz = function(x) 2 * x - 0.5 * x^2
foo = function(x) ifelse(x <= 3, bar(x), baz(x))

当然,您可能希望使用比这些占位符更有意义的名称。