【问题标题】:R ggplot2 - How do I specify out of bounds values' colourR ggplot2 - 我如何指定越界值的颜色
【发布时间】:2014-05-14 11:51:47
【问题描述】:

在以下代码生成的图中,我想更改颜色,使所有

按原样,颜色渐变会延伸到数据的整个数字范围。我尝试添加限制,但这会使所有超出范围的值与 NA 值的颜色相同,这不是我想要的,因为我需要缺少 NA 值才能清楚地突出并且看起来与超出范围值

我确信答案是 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 = " "))

【问题讨论】:

  • 你写'所有大于 1 的值都是“高”颜色'并且'qcMat 包含 0 和 1 之间的值和一些 NA'。当您的数据中没有任何 1 时,为什么要使用 1 作为限制?
  • @Henrik 为这个 sn-p 生成的数据并不是我正在处理的真实数据的真实反映,但它非常接近。还修复了 dissMat 的移除问题。
  • 你也可以像这样设置na.valuescale_fill_gradient(low = "red", high = "green", na.value = "hotpink")

标签: r ggplot2


【解决方案1】:

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

library(scales)

以后

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

【讨论】:

  • 太棒了!我没有加载 scales 包,但除此之外我已经尝试过这个确切的修复。如此接近,但没有雪茄。干杯斯特凡!
  • 我看不懂这个例子。您在哪里指定超出范围的值的颜色?这只是使其值不被视为 NA
  • 这很棒。 squish 在此上下文中将所有值转换为在 limits 参数的最小值和最大值内。即,如果 value max(limits) then value = max(limits)。
【解决方案2】:

尝试将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))))

【讨论】:

  • 感谢 zx8754 这绝对是正确的一步,但不是很完美,我已经更新了我的问题以反映您的建议并澄清了它提出的新问题。干杯!
  • 更新问题。这更接近,但不是很完美。非常感谢您对此提供的帮助我不认为您是我可以给小费的狗狗币用户吗?
猜你喜欢
  • 2017-12-23
  • 2020-07-23
  • 2016-05-29
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 2014-11-29
  • 1970-01-01
相关资源
最近更新 更多