根据时间段对图形的不同区域进行着色

时间:2019-04-11 18:49:56

标签: r ggplot2

我正在使用ggplot2创建一个图形,该图形在x轴上(即1000年前)采用日期,而在y轴上采用概率。我想通过用不同颜色的阴影区域来区分不同的时间段。我在这里存储了以下日期:

paleo.dates <- c(c(13500,8000), c(13500,10050) ,c(10050,9015), 
c(9015,8000), c(8000,2500), c(8000,5500), c(5500,3500), c(3500,2500), 
c(2500,1150), c(2500,2000), c(2000,1500), c(1500,1150), c(1150,500))

我想要一个时间段,例如13500到8000,并对其进行颜色编码,直到它与另一个日期(例如第三项)重叠。

我正在使用ggplot2作弊,并且尝试使用aes(fill = paleo.dates),但这不起作用,因为它的长度与我的数据集的长度不同。我还考虑过使用+ geom_rect()来手动填充区域,但这似乎不是很优雅,而且我不确定它是否还能使用。

任何建议,谢谢。

1 个答案:

答案 0 :(得分:1)

您只需要创建期间的子集。在这种情况下,我创建了一个sub向量,以转换为便于填充的因子。

library(dplyr)
library(ggplot2)

df <- data.frame(paleo.dates = seq(500, 13000, 100),
                 p = runif(n = length(seq(500, 13000, 100)),
                           0, 1))

sub <- data.frame(sub = rep(1:(13000/500), each = 5))
sub <- sub %>%
  dplyr::slice(1:nrow(df))
df <- df %>% 
  dplyr::mutate(period = sub$sub,
                period = as.factor(period))
ggplot2::ggplot(df) +
  geom_bar(aes(x = paleo.dates, y = p, 
               fill = period,
               col = period), 
           show.legend = F, stat = "identity") +
  theme_bw()

enter image description here