在不同的地块上匹配填充梯度

时间:2014-02-25 13:26:10

标签: r ggplot2

让我说我有这些数据:

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)

enter image description here

我的问题是如何标准化填充渐变,以便即使d1和d2中的数据范围不同,X-aY-b的颜色也会匹配两个图但{{1}应该有一个数量级的差异。即我希望两个地块保持相同的比例。

2 个答案:

答案 0 :(得分:5)

为每个情节添加限制:

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)

enter image description here

答案 1 :(得分: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)

enter image description here