如何为构面指定唯一的几何分配?
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
对完成试验所需的时间有影响)。
为了形象化,我想制作一个条形图,显示每个 TrialFinishDate
上 ID
的计数,其中条形由 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))
下面我模拟了一个数据集,其中在 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
对完成试验所需的时间有影响)。
为了形象化,我想制作一个条形图,显示每个 TrialFinishDate
上 ID
的计数,其中条形由 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))