ggplot2:在图下方添加框(goem_rect?),颜色渐变基于值

ggplot2: Add box (goem_rect?) below plot with color gradient based on values

我正在尝试绘制火灾后每年长出的幼苗数量。 y 轴为幼苗数量,x 轴为火灾后的年数。我想在此图下方添加一个框或矩形,以显示每年变化的另一个变量(比方说降雨量)的值。像这样:

我已经设法通过为每年添加一个带有 geom_rect() 的单独矩形来做到这一点,但是有没有办法在没有 10 个单独矩形的情况下做到这一点?特别是这样我只需要指定一次颜色修改,而不是在 geom_rect()??

的 10 次不同调用中

这两篇 (one, two) 较旧的帖子帮助我到达了现在的位置,但我想只用几行代码就可以做到这一点。我无法让 scale_fill_gradient() 工作,但也许这是解决方案的一部分?

此处数据:

yr_since <- c(1:10)
density <- c(23, 58, 68, 126, 154, 103, 90, 94, 73, 59)
rain <- c(3, 6, 8, 5, 8, 3, 4, 4, 6, 2)
data <-as.data.frame(cbind(yr_since, density, rain))

此处当前(可怕的)代码:

plot <- ggplot(data = data, aes(x = yr_since)) +
  geom_col(aes(y=density), width = 0.95) +
  scale_x_discrete(expand = c(0,0), drop=FALSE, labels = yr_since) +
  labs(x = "Years since fire", y = "Density (stems/ha)") 

plot + 
  geom_rect(data=data,
            aes(xmin = 0.5, ymin = -5, 
                xmax = 1.5, ymax = 0,
                fill = rain[1])) +
  geom_rect(data=data,
            aes(xmin = 1.5, ymin = -5, 
                xmax = 2.5, ymax = 0,
                fill = rain[2])) +
  geom_rect(data=data,
            aes(xmin = 2.5, ymin = -5, 
                xmax = 3.5, ymax = 0,
                fill = rain[3])) +
  geom_rect(data=data,
            aes(xmin = 3.5, ymin = -5, 
                xmax = 4.5, ymax = 0,
                fill = rain[4])) +
  geom_rect(data=data,
            aes(xmin = 4.5, ymin = -5, 
                xmax = 5.5, ymax = 0,
                fill = rain[5])) +
  geom_rect(data=data,
            aes(xmin = 5.5, ymin = -5, 
                xmax = 6.5, ymax = 0,
                fill = rain[6])) +
  geom_rect(data=data,
            aes(xmin = 6.5, ymin = -5, 
                xmax = 7.5, ymax = 0,
                fill = rain[7])) +
  geom_rect(data=data,
            aes(xmin = 7.5, ymin = -5, 
                xmax = 8.5, ymax = 0,
                fill = rain[8])) +
  geom_rect(data=data,
            aes(xmin = 8.5, ymin = -5, 
                xmax = 9.5, ymax = 0,
                fill = rain[9])) +
  geom_rect(data=data,
            aes(xmin = 9.5, ymin = -5, 
                xmax = 10.5, ymax = 0,
                fill = rain[10]))

您可以额外调用 geom_col 来添加它们,y 的固定负值:

library(ggplot2)

data <- data.frame(yr_since = c(1:10),
                   density = c(23, 58, 68, 126, 154, 103, 90, 94, 73, 59),
                   rain = c(3, 6, 8, 5, 8, 3, 4, 4, 6, 2))

ggplot(data, aes(x = yr_since, y = density)) +
    geom_col(width = 0.95) + 
    geom_col(aes(y = -5, fill = rain), width = 1) + 
    scale_x_continuous(breaks = data$yr_since, expand = c(0, 0)) + 
    scale_y_continuous(expand = c(0, 0), limits = c(-5, max(data$density) * 1.05)) + 
    labs(x = "Years since fire", 
         y = "Density (stems/ha)") 

随意调整。