r - ggplot2 热图,图表之间具有固定比例的颜色条

标签 r ggplot2 heatmap color-palette

我需要绘制 3 个不同的图,设置相同的比例范围颜色。 我有 3 个具有不同值范围的矩阵。

例如:

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"))

最佳答案

您需要为所有这些设置相同的范围(颜色条的限制)并指定颜色。

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")   

这会给你:

关于r - ggplot2 热图,图表之间具有固定比例的颜色条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44655723/

相关文章:

r - 基于属性的 igraph 相邻边

performance - 平均处理速度越来越慢

r - 如何在 R 中添加副标题并更改 ggplot 图的字体大小?

r - 如何从github使用R脚本?

R:将符合特定条件的.GlobalEnv变量放入列表中

r - 如何使用回归模型删除ggplot中的图例?

r - 使用 geom_bar 在 ggplot2 中求和的问题

具有发散调色板的 R 热图

r - 使用 R 中的 slider 绘制多个数据帧的热图

r - 热图颜色在绘图中不起作用