使用ggplot中的颜色渐变强调指定的值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ggplot中的颜色渐变强调指定的值相关的知识,希望对你有一定的参考价值。

给定这样的数据集:

TT <- c(23.67, 23.67, 23.68, 23.67, 23.67, 23.67, 23.66, 23.59, 23.54, 23.30, 20.65, 16.13,
       13.39, 12.81, 12.04, 11.70, 11.42, 11.24, 10.86, 10.63,  9.88,  9.19,  8.79,  8.37,
       7.85,  7.36,  7.10,  6.99,  6.88,  6.69,  6.39,  6.35,  6.31,  6.25,  6.18,  6.02,
       6.00,  5.96,  5.93,  5.93,  5.86,  5.85,  5.85,  5.85,  5.82,  5.80,  5.78,  5.75)

x <- rep(1, 48)
D <- seq(1, 48)

DF <- data.frame(D, x, TT)

我的目标是使用从红色到蓝色的调色板绘制T中的差异。我目前的情节如下:

gg <- ggplot(data = DF, aes(x = x, y=D, height = 1.1, width = 1.3, fill = TT))+
  geom_tile() +  
  scale_fill_gradient(high = "firebrick2", low = 'dodgerblue2', 
                      na.value = 'grey50', space = "Lab",
                      lim = c(min(DF$T), max(DF$T)))
gg

但我想强调频谱下端的变化渐变(即7到5之间的变化)。在ggplot中是否有一种方法可以使较高的值饱和,因此它们都由单个(或类似的)红色表示,红色和蓝色之间的大部分渐变表示7和5之间的变化?

答案

在填充限制之外设置大于7的所有东西(将为它们分配na.value)并为你的na.value选择稍暗的红色阴影应该可以完成这项工作:

ggplot(DF,
       aes(x = x, y = D, fill = TT)) +
  geom_tile() +
  scale_fill_gradient(high = "firebrick2",
                      low = "dodgerblue2",
                      na.value = "firebrick3", # red for NA values
                      lim = c(min(DF$TT), 7))  # every TT value larger than 7 will be NA

plot

注意:我将列命名为TT而不是T,因为T是R中TRUE的简写。不那么令人困惑。

另一答案

虽然@ Z.lin回答和@Axeman评论解决了关于如何压低更高值并强调OP要求的较低值的差异的问题,但我建议OP采用不同的方法来解决问题。我倾向于不喜欢要求压缩高值的方法,因为它在视觉上描绘数据的真实范围时具有欺骗性。

我将提出一个替代解决方案,即记录变换您的值,以便您的梯度刻度仍然准确地描述您的数据范围。鉴于您的数据范围,log 2转换似乎足够,例如:

log2(6)
[1] 2.584963
log2(12)
[1] 3.584963
log2(24)
[1] 4.584963

ggplot(data = DF, aes(x = x, y=D, height = 1.1, width = 1.3, fill = log2(TT)))+
  geom_tile() +  
  scale_fill_gradient(high = "firebrick2", low = 'dodgerblue2', 
                      na.value = 'grey50', space = "Lab",
                      lim = c(log2(min(DF$T)), log2(max(DF$T))))

enter image description here

以上是关于使用ggplot中的颜色渐变强调指定的值的主要内容,如果未能解决你的问题,请参考以下文章

ggplot 将颜色渐变缩放到数据范围之外

ggplot 直方图 颜色渐变

ggplot2渐变如何设置自定义颜色和值?

如何更改/指定超出渐变条限制的填充颜色?

R语言ggplot2可视化热力图(heatmap)自定义配置图例标签为百分比进行热力图颜色渐变显示(legend to display percentage sign)

R语言ggplot2可视化热力图(heatmap)自定义配置图例标签为百分比进行热力图颜色渐变显示(legend to display percentage sign)