我有一个基于因变量观测值时间序列的条形图。但是,我也想在图中包括一些关于数据子集的指示。这些子集由不完全对应于因变量的解释性变量定义。
例如:
require(dplyr)
df <- data.frame(year = 1995:2020) %>%
mutate(values = runif(26, 0, 1),
dumOne = case_when(year %in% 2000:2010 ~ 1, T ~ 0),
dumTwo = case_when(year %in% 2003:2009 ~ 1, T ~ 0))
ggplot(df, aes(year, values)) + geom_bar(stat = "identity")
在此图中,我想添加与变量dumOne
和dumTwo
以及可能的一些解释性文字相对应的水平线。有什么想法可以实现吗?
答案 0 :(得分:1)
geom_segment
函数是此处的一个选项。只需定义起点和终点以及直线位置的y值即可。我使用了max和min函数来定位开始和结束年份。我在顶部附近画线,但是很容易调整。
df <- data.frame(year = 1995:2020) %>%
mutate(values = runif(26, 0, 1),
dumOne = case_when(year %in% 2000:2010 ~ 1, T ~ 0),
dumTwo = case_when(year %in% 2003:2009 ~ 1, T ~ 0))
#difine the start and stopping points
domin<-min(df$year[df$dumOne==1])
domax<-max(df$year[df$dumOne==1])
dtmin<-min(df$year[df$dumTwo==1])
dtmax<-max(df$year[df$dumTwo==1])
#Create dataframe of values and labels
seg<-data.frame(x=c(domin, dtmin), xend=c(domax, dtmax), y=c(max(df$values)-0.05, max(df$values)-0.1),
Label=c('dumOne', "dumTwo"))
library(ggplot2)
ggplot(df, aes(year, values)) + geom_bar(stat = "identity") +
geom_segment(data=seg, aes(x=x, xend=xend, y=y, yend=y, color=Label), size=2)