使用oob将值更改为ggplot2中的另一种颜色

时间:2017-03-29 10:39:16

标签: r ggplot2 colors

我正在检查这篇文章:R ggplot2 - How do I specify out of bounds values' colour关于如何“指定超出范围的颜色值”。

给出的答案是使用obs=squish,但这不允许您指定超出范围的颜色。在我的例子中,它只使用我的值范围中最接近的颜色。如果我想用另一个突出显示那些呢?

示例:

此处所有超出范围的值以及NA都被视为NA并且颜色为灰色。

dat <- matrix(rnorm(100, 3, 1), ncol=10)
dat.m <- melt(dat)
dat.m[c(1,5,10),3] <- NA 

ggplot(dat.m, aes(Var1, Var2)) +
  geom_tile(aes(fill = value)) + 
  geom_text(aes(label = round(value, 1))) +
  scale_fill_continuous("",limits=c(1,2), low = "#d73027",
                        high = "#4575b4", na.value = "grey") 

但是现在我希望所有超出范围的值都有另一种颜色,比如白色,但NA仍然是灰色的。如果我使用oob=squish,它只是将它们颜色设置为最接近的值,但在哪里可以指定颜色?

ggplot(dat.m, aes(Var1, Var2)) +
  geom_tile(aes(fill = value)) + 
  geom_text(aes(label = round(value, 1))) +
  scale_fill_continuous("",limits=c(1,2), low = "#d73027",
                        high = "#4575b4", na.value = "grey",oob=squish) 

1 个答案:

答案 0 :(得分:2)

最简单的方法是使用两个geom_tile并依靠过度绘制来获得真正的NA值:

ggplot(dat.m, aes(factor(Var1), factor(Var2))) +
  geom_tile(aes(fill = value)) + 
  geom_tile(fill = 'grey', data = subset(dat.m, is.na(value))) +
  geom_text(aes(label = round(value, 1))) +
  scale_fill_continuous("",limits=c(1,2), low = "#d73027",
                        high = "#4575b4", na.value = "lightgreen") +
  coord_fixed()

enter image description here