【问题标题】:match fill gradient across different plots匹配不同地块的填充渐变
【发布时间】:2014-02-25 22:29:46
【问题描述】:

假设我有这些数据:

d1 <- data.frame(x = letters[1:3], y=LETTERS[24:26], num = 1:3)
d2 <- data.frame(x = letters[1:3], y=LETTERS[24:26], num = c(1,2,30))

library(gridExtra)
library(ggplot2) 

ggd1 <- ggplot(d1, aes(x=x,y=y)) + 
          geom_tile(aes(fill=num)) + 
          scale_fill_gradient(low = "green", high = "blue")
ggd2 <- ggplot(d2, aes(x=x,y=y)) + 
          geom_tile(aes(fill=num)) + 
          scale_fill_gradient(low = "green", high = "blue")

grid.arrange(ggd1,ggd2)

我的问题是如何标准化填充渐变,以便即使 d1 和 d2 中的数据范围不同,X-a,Y-b 的颜色应该与两个图匹配,但 Z-c 应该相差一个数量级。即我想为两个图保持相同的比例。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    为每个图添加限制:

    ggd1 <- ggplot(d1, aes(x=x,y=y)) + 
      geom_tile(aes(fill=num)) + 
      scale_fill_gradient(low = "green", high = "blue", limits=c(1, 30))
    ggd2 <- ggplot(d2, aes(x=x,y=y)) + 
      geom_tile(aes(fill=num)) + 
      scale_fill_gradient(low = "green", high = "blue", limits=c(1, 30))
    grid.arrange(ggd1,ggd2)
    

    【讨论】:

      【解决方案2】:

      如果您希望地块的比例相同,则只需一个比例即可。然后,你可以不使用grid.arrange,而是将两个数据集绑定在一起,并添加一个可以在facet_wrap中使用的分组变量:

      d3 <- rbind(d1, d2)
      d3$grp <- rep(1:2, each = 3)
      
      # You may also create a group variable before binding the df:s together, e.g.
      d1$grp <- 1
      d2$grp <- 2
      rbind(d1, d2)
      
      
      
      ggplot(d3, aes(x = x, y = y)) + 
        geom_tile(aes(fill = num)) + 
        scale_fill_gradient(low = "green", high = "blue") +
        facet_wrap(~ grp, ncol = 1)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-22
        • 1970-01-01
        • 2019-04-23
        • 2012-12-09
        • 1970-01-01
        • 2021-12-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多