Bla*_*ard 2 r graph continuous ggplot2
我将使用ggplot2
基于分段函数的 R 库来描绘连续图。
fun1 <- function(x){
ifelse(x<=-2, -1.5*(-x)^2, NA)
}
fun2 <- function(x){
ifelse(x>-2, 6*x-5, NA)
}
gg <- ggplot(data.frame(x = c(-5, 5)),
aes(x = x))+
stat_function(fun = fun1, n=1001)+
stat_function(fun = fun2, n=1001)
print(gg)
Run Code Online (Sandbox Code Playgroud)
这显示了分段函数的正确图形。
但是,如果我将条件稍微改变一下,例如ifelse(x<-2, -1.5*(-x)^2, NA)
和ifelse(x>=-2, 6*x-5, NA)
,那么图表的第一部分将突然无法正确描绘。
这似乎该ifelse
函数现在总是返回-6
所有值x
,无论<=-2
是否返回。
但为什么会突然发生这样的变化呢?我尝试使用标准绘图函数描绘连续曲线,但仍然得到相同的结果......
当您在运算符之间不留空格时,就会发生这种情况。除了降低代码的可读性之外,有时还会使解析器感到困惑。在你的情况下,解析器解释x<-2
为x <- 2
,即“将 2 分配给 x”,而不是x < -2
,即“x 小于负 2”。
当您使用分配作为 中的第一个参数时ifelse
,它将评估分配值的“真实性”,并且由于 2 是正整数,因此它将始终评估为 true。由于在计算该子句时,x 为 2,因此对于该函数的所有输入值,您的输出将为-1.5 * (-2)^2
,即 -6。
如果您使用空格(或括号),则不会发生这种情况:
fun1 <- function(x){
ifelse(x < -2, -1.5*(-x)^2, NA)
}
fun2 <- function(x){
ifelse(x > -2, 6*x-5, NA)
}
gg <- ggplot(data.frame(x = c(-5, 5)),
aes(x = x))+
stat_function(fun = fun1, n=1001)+
stat_function(fun = fun2, n=1001)
print(gg)
Run Code Online (Sandbox Code Playgroud)