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