将geom_rect()添加到ggplot2中的时间序列数据

将geom_rect()添加到ggplot2中的时间序列数据,r,ggplot2,time-series,R,Ggplot2,Time Series,我有一个条形图,它使用x轴的时间序列数据,其中每个条形图代表7天 以下是数据帧的前几行: # A tibble: 40 x 5 # Groups: group [26] group thing minDate count dateRange <drtn> <dbl> <date> <dbl> <chr> 1 1 days 0 2019-04-02

我有一个条形图,它使用x轴的时间序列数据,其中每个条形图代表7天

以下是数据帧的前几行:

# A tibble: 40 x 5
# Groups:   group [26]
   group    thing minDate    count dateRange      
   <drtn>   <dbl> <date>     <dbl> <chr>          
 1  1 days 0      2019-04-02    39 Apr 02 - Apr 08
 2  2 days 0      2019-04-09    39 Apr 09 - Apr 15
 3  3 days 0      2019-04-16    39 Apr 16 - Apr 22
 4  4 days 0      2019-04-23    39 Apr 23 - Apr 29
 5  5 days 0      2019-04-30    39 Apr 30 - May 06
工作图:

library(ggplot2); library(magrittr)

test %>%
  ggplot(aes(x = minDate, 
             y = thing)) +
  geom_bar(stat = "identity") +
  scale_x_date(breaks = seq(min(test$minDate), 
                            max(test$minDate), 
                            by = paste0(7, " days")), 
               date_labels = unique(test$dateRange)) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, size = 10))

我不确定您想要的输出应该是什么样子,但这只需要您自己进行一些调整:

联吡啶酯 图书馆弹琴 recs% 过滤器计数==0%>% mutatexmin=minDate-days3, xmax=minate+days3 测试%>% ggplotaesx=minDate, y=东西+ 长方形在栅栏后面 geom_rectdata=recs, 矩形的一些固定高度 aesxmin=xmin,xmax=xmax,ymin=0,ymax=0.7, 填充=红色,颜色=白色,alpha=0.2+ geom_barstat=标识+ scale_x_datebreaks=seqmintest$minDate, maxtest$minDate, 截止日期=07,天, 日期标签=唯一的$dateRange+ themeaxis.text.x=element\u textangle=90,hjust=1,size=10
我不确定您想要的输出应该是什么样子,但这只需要您自己进行一些调整:

联吡啶酯 图书馆弹琴 recs% 过滤器计数==0%>% mutatexmin=minDate-days3, xmax=minate+days3 测试%>% ggplotaesx=minDate, y=东西+ 长方形在栅栏后面 geom_rectdata=recs, 矩形的一些固定高度 aesxmin=xmin,xmax=xmax,ymin=0,ymax=0.7, 填充=红色,颜色=白色,alpha=0.2+ geom_barstat=标识+ scale_x_datebreaks=seqmintest$minDate, maxtest$minDate, 截止日期=07,天, 日期标签=唯一的$dateRange+ themeaxis.text.x=element\u textangle=90,hjust=1,size=10
下面似乎给出了我认为你的目标。请注意,geom_tile与geom_rect非常相似,但参数化为x/y/width/height,而不是xmin/xmax/ymin/ymax。因此,我们可以为每个计数==0制作一系列平铺


下面似乎给出了我认为你的目标。请注意,geom_tile与geom_rect非常相似,但参数化为x/y/width/height,而不是xmin/xmax/ymin/ymax。因此,我们可以为每个计数==0制作一系列平铺


那几个星期应该有两排吗?如果是这样,我将使用dplyr::summary进行聚合

图书馆;图书馆GGPLOT2 断裂x% dplyr::总结 半透明的, y=最大值 %>% dplyr::解组 标签x% ggplotaesx=minDate,y=y,填充=半透明+ geom_barstat=标识+ 比例x\u日期中断=中断x,日期标签=标签x+ 比例\填充\手动值=调色板\半透明+ themeaxis.text.x=element\u textangle=90,hjust=1,size=10+ labsfill=计数为零 我的解释不同于@teunbrand,即每个时间段一个矩形和@wusel,即时间段的ymax,而不是样本。如果我们都有误解,请描述一下如何理解

编辑:如果您想要@wusel的方法,可以跳过最大值计算,改用Inf,这是ggplot进入可见比例顶部的快捷方式


休息时间是不是应该有两排?如果是这样,我将使用dplyr::summary进行聚合

图书馆;图书馆GGPLOT2 断裂x% dplyr::总结 半透明的, y=最大值 %>% dplyr::解组 标签x% ggplotaesx=minDate,y=y,填充=半透明+ geom_barstat=标识+ 比例x\u日期中断=中断x,日期标签=标签x+ 比例\填充\手动值=调色板\半透明+ themeaxis.text.x=element\u textangle=90,hjust=1,size=10+ labsfill=计数为零 我的解释不同于@teunbrand,即每个时间段一个矩形和@wusel,即时间段的ymax,而不是样本。如果我们都有误解,请描述一下如何理解

编辑:如果您想要@wusel的方法,可以跳过最大值计算,改用Inf,这是ggplot进入可见比例顶部的快捷方式


breaks_x映射geom_tile中的宽度参数正是我想要的。我没有想到要使用这个geom层。从geom_tile映射宽度参数正是我想要的。我没想到要用这个几何图层。
library(ggplot2); library(magrittr)

test %>%
  ggplot(aes(x = minDate, 
             y = thing)) +
  geom_bar(stat = "identity") +
  scale_x_date(breaks = seq(min(test$minDate), 
                            max(test$minDate), 
                            by = paste0(7, " days")), 
               date_labels = unique(test$dateRange)) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, size = 10))
ggplot(test, aes(x = minDate, 
                 y = thing)) +
  geom_tile(data = test[test$count == 0, ],
            aes(x = minDate, 
                y = 0.5 * max(test$thing), 
                # A width of 7 days
                width = 7, 
                height = max(test$thing)), 
            alpha = 0.2) +
  geom_bar(stat = "identity") +
  scale_x_date(breaks = seq(min(test$minDate), 
                            max(test$minDate), 
                            by = paste0(7, " days")), 
               date_labels = unique(test$dateRange)) +
  theme(axis.text.x = element_text(angle = 90, hjust = 1, size = 10))