R ggplot2 - 如何指定超出边界值的颜色

时间:2014-05-14 11:51:48

标签: r ggplot2

在由以下代码生成的图中,我想改变颜色,以便所有值< 0.6与“低”颜色相同,所有大于1的值都是“高”颜色。

按原样,颜色渐变在数据的整个数值范围内延伸。我已经尝试添加限制但是这使得所有越界值的值与NA值相同,这不是我想要的,因为我需要丢失NA值以明确伸出并且看起来不同于超出边界值的相同颜色<0.6

我确信答案是关于oob,打破了争论,但没有成功让它发挥作用。

library(ggplot2)
a = rnorm(17*17, 0.733,0.21)
qcMat = matrix(a, ncol = 17)
qcMat[qcMat> 1] = 1
#qcMat contains values between 0 and 1 and some NAs

m = melt(t(qcMat))
m$Var2 <- with(m,factor(Var2, levels = rev(sort(unique(Var2)))))
ggplot(m, aes(as.factor(Var1), Var2, group=Var2)) +
  geom_tile(aes(fill = value)) +
  geom_text(aes(fill = m$value, label = round(m$value, 2))) +
  scale_fill_gradient(low = "red", high = "green") +
  xlab("") + ylab("") + ggtitle(paste("biscuit:", biscuit_id, "- QC", sep = " "))

2 个答案:

答案 0 :(得分:22)

正如你自己所说,你想要oob中的scale_fill_gradient参数。要限制值,您可以使用squish from the scales package(安装scales时安装ggplot2):

library(scales)

以后

scale_fill_gradient(low = "red", high = "green", limits=c(0.6, 1), oob=squish)

答案 1 :(得分:0)

尝试将geom_tile更改为以下内容:

  geom_tile(aes(fill = ifelse(value<0.6,min(m$value,na.rm=TRUE),
                              ifelse(value>1,max(m$value,na.rm=TRUE),
                                     value))))

编辑:然后不要使用min max,所以我们将得到0.6-1范围:

geom_tile(aes(fill = ifelse(value<0.6,0.6,
                            ifelse(value>1,1,
                                   value))))