ggplot2:为特定域添加 stat_function?
ggplot2: add stat_function for particular domain?
我想在使用 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 way" 来实现它。
我在一个闪亮的应用程序中制作这些图也可能是相关的,尽管除了带有 data.table
的有趣废话外,我没有注意到影响任何东西。
以下似乎有效,但对我来说仍然感觉很老套:
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])
尝试在数据框中添加另一个标签作为新列。
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)
我想在使用 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 way" 来实现它。
我在一个闪亮的应用程序中制作这些图也可能是相关的,尽管除了带有 data.table
的有趣废话外,我没有注意到影响任何东西。
以下似乎有效,但对我来说仍然感觉很老套:
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])
尝试在数据框中添加另一个标签作为新列。
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)