ggplot2中没有扭结的“分段式”函数图

时间:2019-03-21 19:57:23

标签: r ggplot2 smoothing piecewise

我正在尝试复制以下图形: enter image description here

我的代码如下:

fun1 <- function(x){
  314.32*x^2.413
}

fun2 <- function(x){
  350-0.7136*50/x^(2.413*6)
}


fun3 <- function(x){
  2500-4.37136*500/x^(2.413*4)
}

gg1 <- ggplot(data.frame(x = c(0, 3)), 
              aes(x = x))+
  stat_function(fun = fun1)+
  stat_function(fun = fun2)+
  stat_function(fun = fun3)`

gg2 <- gg1 + ylim(0, 2500)

print(gg2)

代码可以工作,但我只希望第一个功能仅用于x <= 1的值,而其他两个功能仅用于x > 1的值。我尝试与xlim一起玩,但到目前为止没有任何效果。另外,我不想在x = 1处扭结,但是我对如何添加平滑粘贴条件感到非常困惑。

这里是初学者,因此非常感谢您提供一个简单的解决方案!

1 个答案:

答案 0 :(得分:1)

查看此解决方案:

fun1 <- function(x){
  ifelse(x<=1, 314.32*x^2.413, NA)
}

fun2 <- function(x){
  ifelse(x>1, 350-0.7136*50/x^(2.413*6), NA)
}


fun3 <- function(x){
  ifelse(x>1, 2500-4.37136*500/x^(2.413*4), NA)
}

library(ggplot2)
gg1 <- ggplot(data.frame(x = c(0, 3)), 
              aes(x = x))+
  stat_function(fun = fun1, n=1001)+
  stat_function(fun = fun2, n=1001)+
  stat_function(fun = fun3, n=5001)

gg2 <- gg1 + ylim(0, 2500) 

print(gg2)

enter image description here