在ggplot2中绘制离散(或不连续)函数

时间:2012-02-17 14:31:15

标签: r ggplot2

我有以下功能,我想用ggplot绘图:

f(x)= 3/4,x在0和1之间; x为1/4,介于2和3之间;其他地方0。

我提出了以下R代码:

eq<-function(x) {
    if(x>=0 && x<=1) {
        y<-3/4
    } else if(x>=2 && x<=3) {
        y<-1/4
    } else {
    y<-0
    }
return(y)
}

library(ggplot2)

ggplot(data.frame(x=c(-5,5)), aes(x)) + stat_function(fun=eq)

但是,这会产生一个只有以0为中心的水平线的图。我做错了什么?

2 个答案:

答案 0 :(得分:5)

该功能应该“矢量化”,即 接受一个向量作为参数。

eq <- function(x) 
  ifelse( x>=0 & x<=1, 3/4,
  ifelse( x>=2 & x<=3, 1/4, 0 ))
ggplot(data.frame(x=c(-5,5)), aes(x)) + 
  stat_function(fun=eq, geom="step")

答案 1 :(得分:0)

我认为这是另一个可以使用switch可以产生很大效果的地方,或类似的内容    ysteps <- c(.75,.25,0)
xsteps <- c(1,2,3)
y <- ysteps[which(x >= xsteps)]

请随意编辑,以便它正确 - 我的大脑很慢,我现在没有R。