ggplot2:如何在时间序列geom_bar图中指示数据子集?

时间:2019-05-20 13:41:46

标签: r ggplot2

我有一个基于因变量观测值时间序列的条形图。但是,我也想在图中包括一些关于数据子集的指示。这些子集由不完全对应于因变量的解释性变量定义。

例如:

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")

在此图中,我想添加与变量dumOnedumTwo以及可能的一些解释性文字相对应的水平线。有什么想法可以实现吗?

1 个答案:

答案 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)

enter image description here