ComplexUpset包中Upset图条纹颜色与指定组映射错误问题
问题描述
使用R语言ComplexUpset包绘制Upset图时,尝试通过额外的dataframe属性为集合条纹着色,出现两组颜色映射错误:
- 预期规则:以C结尾的集合为浅三文鱼色(lightsalmon),以M结尾的为浅天蓝色(lightskyblue2),以S结尾的为浅绿(palegreen3)
- 实际错误:"TvC"显示为蓝色(应为三文鱼色),"SvM"显示为三文鱼色(应为蓝色)
原代码如下:
library(ComplexUpset) combined2 <- data.frame(letter = c("a", "b", "c", "d", "e"), SvC = c(1,0,1,0,0), TvC = c(1,1,1,1,0), MvC = c(1,0,0,0,0), SvM = c(0,0,1,0,0), TvM = c(0,1,1,0,0), TvS = c(1,0,1,0,1) ) combined_metadata <- data.frame(set = c("SvC", "TvC", "MvC", "SvM", "TvM", "TvS"), #set name relative_to = c("C", "C", "C", "M", "M", "S")) #set attribute upset(combined2, intersect = treats, mode = 'inclusive_intersection', intersections = list( "SvC", "TvC", "MvC", "SvM", "TvM", "TvS", c("SvC", "TvC"), c("SvC", "TvC", "MvC"), c("SvM", "TvM")), stripes = upset_stripes(data = combined_metadata, aes(color = combined_metadata$relative_to), colors = c("C" = "lightsalmon", "M" = "lightskyblue2", "S" = "palegreen3") ) )
问题原因
intersect = treats中treats是未定义变量,会导致代码运行报错- 直接使用
combined_metadata$relative_to作为aes的颜色映射,会让颜色按metadata的行顺序分配,而非根据集合名称匹配Upset图中的实际集合顺序,导致映射错位
修正后的代码
library(ComplexUpset) combined2 <- data.frame(letter = c("a", "b", "c", "d", "e"), SvC = c(1,0,1,0,0), TvC = c(1,1,1,1,0), MvC = c(1,0,0,0,0), SvM = c(0,0,1,0,0), TvM = c(0,1,1,0,0), TvS = c(1,0,1,0,1) ) combined_metadata <- data.frame(set = c("SvC", "TvC", "MvC", "SvM", "TvM", "TvS"), relative_to = c("C", "C", "C", "M", "M", "S")) # 定义所有参与分析的集合列 treats <- colnames(combined2)[-1] upset(combined2, intersect = treats, mode = 'inclusive_intersection', intersections = list( "SvC", "TvC", "MvC", "SvM", "TvM", "TvS", c("SvC", "TvC"), c("SvC", "TvC", "MvC"), c("SvM", "TvM")), stripes = upset_stripes( data = combined_metadata, aes(color = relative_to), # 直接使用列名,让函数自动按集合名称匹配属性 colors = c("C" = "lightsalmon", "M" = "lightskyblue2", "S" = "palegreen3") ) )
关键改动说明
- 补全
treats变量定义,明确参与分析的集合列,解决未定义变量报错问题 - 将
aes(color = combined_metadata$relative_to)改为aes(color = relative_to):upset_stripes会自动通过combined_metadata中的set列与Upset图中的集合名称关联,确保颜色映射与预期规则一致 - 保证
combined_metadata的set列包含所有需要着色的集合名称,确保每个集合都能匹配到对应的颜色属性
内容的提问来源于stack exchange,提问作者cterry
相关产品推荐
相关产品推荐

