如何为构面指定唯一的几何分配?

How to specify unique geom assignments to facets?

下面我模拟了一个数据集,其中在 5 个不同的日子里对 5 组个人进行了分配(每天有 200 个新个人的新组)。 TrialStartDate 表示分配给每个人的日期 (ID),TrialEndDate 表示每个人完成分配的时间。

set.seed(123)
data <- 
  data.frame(
    TrialStartDate = rep(c(sample(seq(as.Date('2019/02/01'), as.Date('2019/02/15'), by="day"), 5)), each = 200),
    TrialFinishDate = sample(seq(as.Date('2019/02/01'), as.Date('2019/02/15'), by = "day"), 1000,replace = T),
    ID = seq(1,1000, 1)
  )

我有兴趣比较个人完成试验所需的时间,具体取决于他们开始试验的时间(即,假设 TrialStartDate 对完成试验所需的时间有影响)。

为了形象化,我想制作一个条形图,显示每个 TrialFinishDateID 的计数,其中条形由 TrialStartDate 着色(因为每个 TrialStartDate 行为作为分组变量)。到目前为止我想出的最好的方法是像这样分面:

data%>%
  group_by(TrialStartDate, TrialFinishDate)%>%
  count()%>%
  ggplot(aes(x = TrialFinishDate, y = n,  col = factor(TrialStartDate), fill = factor(TrialStartDate)))+
  geom_bar(stat = "identity")+
  facet_wrap(~TrialStartDate, ncol = 1)

但是,我还想在每个方面添加一条垂直线,显示 TrialStartDate 何时用于每个组(最好与条形颜色相同)。当尝试使用 geom_vline 添加垂直线时,它会将所有线添加到每个面:

data%>%
  group_by(TrialStartDate, TrialFinishDate)%>%
  count()%>%
  ggplot(aes(x = TrialFinishDate, y = n,  col = factor(TrialStartDate), fill = factor(TrialStartDate)))+
  geom_bar(stat = "identity")+
  geom_vline(xintercept = unique(data$TrialStartDate))+
  facet_wrap(~TrialStartDate, ncol = 1)

我们如何才能使垂直线对于每个方面的各个组都是唯一的?

您在 aes 之外指定 xintercept,因此分面未得到遵守。

这应该可以解决问题:

data %>%
  group_by(TrialStartDate, TrialFinishDate)%>%
  count()%>%
  ggplot(aes(x = TrialFinishDate, y = n,  col = factor(TrialStartDate), fill = factor(TrialStartDate)))+
  geom_bar(stat = "identity")+
  geom_vline(aes(xintercept = TrialStartDate))+
  facet_wrap(~TrialStartDate, ncol = 1)

备注geom_vline(aes(xintercept = TrialStartDate))