2017-06-20 1055 views
1

我需要绘制3个不同的图来设置相同的比例范围颜色。 我有3个不同数值范围的矩阵。R ggplot2热图贴图之间的固定比例颜色

例如:

range(matrixA) 
# 0.60 0.85 
range(matrixB) 
# 0.65 0.95 
range(matrixA) 
# 0.5 1.0 

我想有相同的颜色填充的地块。例如,对于差异图中的所有0.8值,如果在第一个图中为0.8橙色,我希望不同图中的所有0.8值都是相同的橙色。

我在这一刻的问题是:

在第一条曲线,最大值的颜色是红色,则该值0.85为红色。

在第二个图中,最大值为红色,但在这种情况下,最大值为0.95,并且出现问题。

我的代码:

mat.melted <- melt(matrixA) 
colnames(mat.melted) <- c("p","c","v") 
p <- ggplot(mat.melted, aes(x=c,y=p,fill=v) + 
     geom-tile() + 
     scale_fill_gradintn(limits = c(min(as.vector(matrixA)), max(as.vector(matrixA))), 
          colors = c("yellow","orange","red")) 
+0

PLS提供通过提供您的数据的[再现的示例](https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) ,或者对它们进行模拟。使用'dput(mat.melted)'并将结果粘贴到问题中。顺便说一句我想你说的是data.frames,而不是matrix-es – GGamba

回答

1

您需要设置范围(色条的限制)同样为所有的人,还可以指定颜色之间的界限为了它。

rng = range(matrixA, matrixB, matrixC) 

并添加到您的ggplot代码:

g + scale_fill_gradient2(low="green", mid="lightblue", high="red", #colors in the scale 
       midpoint=mean(rng), #same midpoint for plots (mean of the range) 
       breaks=seq(0,1,0.25), #breaks in the scale bar 
       limits=c(floor(rng[1]), ceiling(rng[2]))) 

例子:

下面是一个例子,可以帮助你得到你想要的东西:

x <- matrix(60:85, 5)/100 
y <- matrix(65:95, 5)/100 
z <- matrix(50:100, 5)/100 


rng = range(c((x), (y), (z))) 

library(reshape) 
library(ggplot2) 

ggplot(data = melt(x)) + geom_tile(aes(x=X1,y=X2,fill = value)) + 
    scale_fill_gradient2(low="green", mid="lightblue", high="red", #colors in the scale 
        midpoint=mean(rng), #same midpoint for plots (mean of the range) 
        breaks=seq(0,1,0.25), #breaks in the scale bar 
        limits=c(floor(rng[1]), ceiling(rng[2]))) + #same limits for plots 
        ggtitle("X") 

ggplot(data = melt(y)) + geom_tile(aes(x=X1,y=X2,fill = value)) + 
    scale_fill_gradient2(low="green", mid="lightblue", high="red", 
        midpoint=mean(rng), 
        breaks=seq(0,1,0.25), 
        limits=c(floor(rng[1]), ceiling(rng[2]))) + 
        ggtitle("Y")     

ggplot(data = melt(z)) + geom_tile(aes(x=X1,y=X2,fill = value)) + 
scale_fill_gradient2(low="green", mid="lightblue", high="red", 
        midpoint=mean(rng),  
        breaks=seq(0,1,0.25), 
        limits=c(floor(rng[1]), ceiling(rng[2]))) + 
        ggtitle("Z") 

这将给你:

+0

非常感谢你! :) 有用! :) – TheAvenger

0

加入0.5和1

mat.melted <- melt(matrixA) 
colnames(mat.melted) <- c("p","c","v") 
p <- ggplot(mat.melted, aes(x=c,y=p,fill=v) + 
     geom-tile() + 
     scale_fill_gradintn(colors = c("yellow","orange","red")),limits=c(0.5,1))