R 中绘图/热图的颜色

Sam*_*ore 2 plot r colors heatmap

我正在 R 中创建许多热图,但在保持图表之间的色标一致时遇到问题。

我发现图表中的颜色是按比例缩放的,有没有办法使图表之间的颜色保持一致?IE。那么 0.4 和 0.5 之间的色差总是相同的吗?

代码示例:

set.seed(123)

d1 = matrix(rnorm(9, mean = 0.2, sd = 0.1), ncol = 3)
d2 = matrix(rnorm(9, mean = 0.8, sd = 0.1), ncol = 3)

mat = list(d1, d2)

for(m in mat)
  heatmap(m, Rowv = NA ,Colv = NA)
Run Code Online (Sandbox Code Playgroud)

您会在示例中注意到,第一个图形的单元格 (2,3) 与第二个图形中的单元格 (1,3) 相似,尽管相差约 0.8

eip*_*i10 5

ggplot2如果您愿意不使用基本图形,则可以使用以下方法来实现此目的:

library(reshape2)
library(ggplot2)

# Set common limits for color scale
limits = range(unlist(mat))
Run Code Online (Sandbox Code Playgroud)

这是两个独立图表的代码。每个图表的最后一行代码确保它们使用相同的 z 限制来设置颜色:

ggplot(melt(mat[[1]]), aes(Var1, Var2, fill=value)) +
  geom_tile() + 
  scale_fill_continuous(limits=limits)

ggplot(melt(mat[[2]]), aes(Var1, Var2, fill=value)) +
  geom_tile() + 
  scale_fill_continuous(limits=limits)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

另一种选择是使用分面在单个图表中绘制两个热图,这会自动确保两个图表具有相同的色标:

ggplot(melt(mat), aes(Var1, Var2, fill=value))   +
  geom_tile() + 
  facet_grid(. ~ L1)
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我在这里使用了默认颜色,但是对于任何一种方法,您都可以将色阶设置为您想要的任何颜色。例如:

ggplot(melt(mat), aes(Var1, Var2, fill=value))   +
  geom_tile() + 
  facet_grid(. ~ L1) +
  scale_fill_gradient(low="red", high="green")
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述