ggplot2:为特定域添加stat_function?

时间:2015-01-16 17:06:48

标签: r ggplot2

我想在ggplot中使用曲线添加曲线,但我只希望曲线显示在特定的域中。

我尝试了使用stat_function的各种方法:

data <- data.frame(Date = ..., cases = ...)
end_date <- ... ## calculated from a date (e.g., Sys.Date()) minus an offset
start_date <- ... ## end_date - some offset
p1 <- ggplot(data) + aes(x=Date, y=cases) + ... ## data has Date, cases columns
p1 + stat_function(...something..., fun=function(t) ...)

我试图将一些新的,子集化的数据块放在哪里:

data = data[(start_date <= data$Date) & (data$Date <= end_date),] ## no change

和新的aes

aes = aes(xmin = start_date, xmax = end_date)
## error - thinks start_date / end_date don't exist,
## though they are declared earlier

有什么建议吗?我也在annotate("path", ...)摆弄,但没有什么具体的。我觉得这应该是一件容易的事情,我只是没有理解“ggplot方式”来实现它。

我在一个闪亮的应用程序中创建这些图也可能是相关的,虽然除了有趣的废话w / data.table之外,我没有注意到影响任何事情。

2 个答案:

答案 0 :(得分:0)

以下似乎有效,但对我来说仍然感觉非常黑客:

data$fit <- ... # evaluate function on Date
relrows <- (start_date <= data$Date) & (data$Date <= end_date) 
p1 <- p1 + annotate("line", y=data$fit[relrows], x=data$Date[relrows])

答案 1 :(得分:0)

尝试在数据框中添加另一个标签作为新列。

df$newlabel[(start_date <= data$Date) $ (data$Date <= end_date)]<-a 

然后将论坛添加到ggplot

p1 <- ggplot(data) 
    + aes(x=Date, y=cases, group=newlabel, colour=newlabel)
    + geom_point()
    + stat_smooth(method = "lm", formula = y ~ poly(x,2), size=1)