使用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
注意:我将列命名为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))))
以上是关于使用ggplot中的颜色渐变强调指定的值的主要内容,如果未能解决你的问题,请参考以下文章
R语言ggplot2可视化热力图(heatmap)自定义配置图例标签为百分比进行热力图颜色渐变显示(legend to display percentage sign)
R语言ggplot2可视化热力图(heatmap)自定义配置图例标签为百分比进行热力图颜色渐变显示(legend to display percentage sign)