【问题标题】:Shading different regions of the graph based on time period根据时间段对图表的不同区域进行着色
【发布时间】:2019-09-02 11:50:27
【问题描述】:

我正在使用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() 手动填充这些区域,但这似乎不太优雅,我不确定它是否会起作用。

感谢任何建议,谢谢。

【问题讨论】:

  • “直到它与另一个日期重叠”是什么意思?第二个条目不也与第一个重叠吗?在这些重叠中会发生什么?根据日期在一组互斥范围内的位置更改阴影应该很容易。
  • 是的,一开始日期有点像,我想制作某种渐变颜色来表示重叠,但也不知道该怎么做。如何在互斥范围内更改阴影?使用 geom_rect() 不是很令人满意,所以如果有一个聪明的方法会很整洁。
  • 创建一列标识每一行的范围(例如,使用 case_when),并根据该列进行填充

标签: r ggplot2


【解决方案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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-04
    • 2011-04-10
    • 2021-05-13
    • 2012-09-23
    • 2021-08-02
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    相关资源
    最近更新 更多