2014-03-06 91 views
8
library(ggplot2) 
library(cumplyr) 
library(scales) 
library(RColorBrewer) 


myPalette <- colorRampPalette(rev(brewer.pal(11, "Spectral"))) 

x = 1:5 
y = 1:5 
pts = cartesian_product(c('x','y')) 
d1 = cbind(pts, runif(nrow(pts),min=0,max=1), 1) 
d2 = cbind(pts, runif(nrow(pts),min=0,max=4), 2) 
colnames(d1) = colnames(d2) = c("x","y","val","k") 
d = rbind(d1,d2) 

p1 <- ggplot(d1) 
p1 <- p1 + geom_tile(aes(x = x, y = y, fill = val)) 
p1 <- p1 + scale_fill_gradientn(colours = myPalette(4)) 
p1 

p2 <- ggplot(d2, aes(x = x, y = y, fill = val)) 
p2 <- p2 + geom_tile(aes(x = x, y = y, fill = val)) 
p2 <- p2 + scale_fill_gradientn(colours = myPalette(4)) 
p2 

這導致下面的兩個圖。我的問題是,使用這種相同類型的配色方案,我該如何讓兩個圖都使用相同的比例尺來實現價值?例如。 p1應該比p2更統一。如何以相同的比例獲得多個ggplot2 scale_fill_gradientn?

P1: p1

P2: enter image description here

回答

8

使用limitscale_gradientn

p1 <- ggplot(as.data.frame(d1)) 
p1 <- p1 + geom_tile(aes(x = x, y = y, fill = val)) 

p2 <- ggplot(as.data.frame(d2), aes(x = x, y = y, fill = val)) 
p2 <- p2 + geom_tile(aes(x = x, y = y, fill = val)) 
library(gridExtra) 

p1 <- p1 + scale_fill_gradientn(colours = myPalette(4), limits=c(0,4)) 
p2 <- p2 + scale_fill_gradientn(colours = myPalette(4), limits=c(0,4)) 
grid.arrange(p1, p2) 

enter image description here

grid.arrange的東西,只是爲了避免我不必複製/過去兩張照片。

+3

通過它的外觀,grid.arrange大約節省了兩分鐘:P –

2

在scale_fill_gradientn設定的範圍是相同的,因此,例如:

scale_fill_gradientn(colours = myPalette(4),limits=c(0,4)) 

這是p1和p2:

p1

p2