在R数据框列中保存颜色渐变值



我有一个带有p-values列的大数据框架,看起来像下面的代码片段

myPvalues<-data.frame(pvalues=c(0.00431279265850473,NA,0.00067818958352233,NA,NA,NA,0.00826354450511943,0.00605467431746949,0.00518801869607421,0.00896893103806155))

我想通过使用已经定义或要创建的热图将这些值映射到颜色。我知道如何制作一个图表,以适当的方式为数据着色,但我不知道如何在数据框架中添加一列,以保存这些颜色的值,这样数据框架现在也有一个列,如

myPvalues$Colors<-c("#75F4A1","#FFFFFFFF","#547CB8","#FFFFFFFF","#FFFFFFFF","#FFFFFFFF","#F9A13A","#D6F667","#92FC79","#F58046")

,"white"是NA值,其他值是颜色的代码(在这里,我放了任意代码,但它们需要来自颜色梯度的颜色,极值由min(myPvalues$pvalues)和max(myPvalues$pvalues)定义。

我一直在寻找,但没有找到完全解决这个问题的解决方案。有人能给我点指示吗?

首先定义渐变颜色。我随机选择了红色和绿色

library(tidyverse)
colfunc <- colorRampPalette(c('red', 'green'))

然后你需要计算当前颜色的排名。需要注意的是,colorRampPalette()需要一个整数输入,因此值之间颜色的差异并不总是正确的。

pvalue_forColors <- myPvalues %>%
drop_na(pvalues) %>% 
arrange(pvalues) %>%
mutate(rank = row_number())
myPvalues <- left_join(myPvalues, pvalue_forColors, by = 'pvalues')

生成渐变

the_colors <- tibble(rank = 1:max(myPvalues$rank, na.rm = T), color_code = colfunc(max(myPvalues$rank, na.rm = T)))

最后一列称为color_code,用渐变和白色表示缺失值。

myPvalues %>%
left_join(the_colors, by = 'rank') %>%
mutate(color_code = if_else(is.na(pvalues), '#FFFFFFFF', color_code))

相关内容

  • 没有找到相关文章

最新更新