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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (29)

我正在创建一个图表,使用ggplot2x轴(即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 cheatsheat,我试图使用aes(fill = paleo.dates),但这不起作用,因为它与我的数据集的长度不同。我也在考虑使用+ geom_rect()手动填充区域,但这看起来并不优雅,我不确定它是否会起作用。

任何建议表示赞赏,谢谢。

提问于
用户回答回答于

您只需要创建一个句点子集。在这种情况下,我创建了一个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()

扫码关注云+社区

领取腾讯云代金券