我想在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
之外,我没有注意到影响任何事情。
答案 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)