我正在检查这篇文章: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)
答案 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()