首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ggplot2:添加框(goem_rect?)下面是基于值的颜色渐变图

ggplot2:添加框(goem_rect?)下面是基于值的颜色渐变图
EN

Stack Overflow用户
提问于 2018-02-13 07:07:41
回答 1查看 664关注 0票数 1

我在试着画出火灾后每年出苗的苗木数量。苗木的数量在y轴上,也就是火在x轴上的年份。我想在这个图下面添加一个方框或矩形,以显示另一个变量(假设降雨量)的值每年都会变化。如下所示:

我已经设法做到了这一点,用geom_rect()为每年添加了一个单独的矩形,但是有没有一种方法可以不使用10个单独的矩形呢?特别是这样我只需要指定一次颜色修改,而不是在10个不同的geom_rect()调用中??

这两篇较早的文章(onetwo)帮助我走到了今天,但我只想用几行代码就能做到这一点。我还没能让scale_fill_gradient()正常工作,但也许这是解决方案的一部分?

此处的数据:

代码语言:javascript
复制
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))

当前(可怕的)代码如下:

代码语言:javascript
复制
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]))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-13 07:22:24

您可以使用y的固定负值进行额外的geom_col调用来添加它们

代码语言:javascript
复制
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)") 

根据需要进行调整。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48757044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档