如何将数据帧中的因子转换为R中预先指定的颜色名称?
我正在尝试为基因表达数据生成热图,其中也有表示临床数据的列,如图所示: 我的问题是,heatmap.plus和heatmap.3都要求在热图中指定颜色的矩阵实际上写为颜色名称。他们不会在一列中提取正常因子并将其转换为颜色 这就是我的数据帧“df”的外观:如何将数据帧中的因子转换为R中预先指定的颜色名称?,r,R,我正在尝试为基因表达数据生成热图,其中也有表示临床数据的列,如图所示: 我的问题是,heatmap.plus和heatmap.3都要求在热图中指定颜色的矩阵实际上写为颜色名称。他们不会在一列中提取正常因子并将其转换为颜色 这就是我的数据帧“df”的外观: sample_name gender chemotherapy clinical_subtype sample_01 M alk 1 sample_02
sample_name gender chemotherapy clinical_subtype
sample_01 M alk 1
sample_02 F tmz 2
sample_03 M rad 2
sample_04 M rad.tmz 4
sample_05 F tmz 3
我可以使用以下代码生成与特定颜色匹配的每个因子水平的数据框:
gender_colors <- with(df, data.frame(row.names = levels(gender), color = brewer.pal(nlevels(gender), name = 'Set1')))
有没有办法用这个数据框来索引原始因子,用它们相应的颜色来替换它们,这样我的原始框看起来会像下面这样
sample_name gender chemotherapy clinical_subtype
sample_01 #8DA0CB #FC8D62 #FDAE61
sample_02 #FC8D62 #66C2A5 #FFFFBF
sample_03 #8DA0CB #C2294A #FFFFBF
sample_04 #8DA0CB #FA9856 #A6D96A
sample_05 #FC8D62 #66C2A5 #1A9641
如果有一种更简单的方法可以做到这一点,而不需要我生成与特定颜色匹配的中间因子级数据帧,这可能会容易得多,但对此问题的任何帮助都将不胜感激
color
1 #D7191C
2 #FDAE61
3 #FFFFBF
4 #A6D96A
5 #1A9641
我建议保持简单,并使用
merge()
将各种颜色的数据帧连接到主df
数据帧上。例如,要将性别color
数据框加入到df
中,可以使用以下方法:
color.gender <- data.frame(gender=c("", "F", "M"),
color=c("#66C2A5", "#FC8D62", "#8DA0CB"))
df <- merge(df, color.gender, by="gender")
如果您被限制为特定数量的列或名称,您可以很容易地修改数据框。化疗和临床亚型的颜色是从哪里来的?它们位于单独的数据框中,看起来与性别完全相同(见上文)。您不能只使用
合并()
加入3列的颜色?是的,实际上效果非常好。我想我是想把问题复杂化了!非常感谢。
color.gender <- data.frame(gender=c("", "F", "M"),
color=c("#66C2A5", "#FC8D62", "#8DA0CB"))
df <- merge(df, color.gender, by="gender")
sample_name gender chemotherapy clinical_subtype color.gender
sample_01 M alk 1 #8DA0CB
sample_02 F tmz 2 #FC8D62
sample_03 M rad 2 #8DA0CB
sample_04 M rad.tmz 4 #8DA0CB
sample_05 F tmz 3 #FC8D62