График «кусочной» функции без перегибов в ggplot2 - PullRequest
0 голосов
/ 21 марта 2019

Я пытаюсь повторить график ниже: 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 Ответ

1 голос
/ 22 марта 2019

См. Это решение:

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

...