如何绘制包含分组占比与FC值的双参数旭日图?
绘制带FC值和分组占比的基因旭日图
我有200个带FC值的差异表达基因(DEGs),分属8个分组。已完成分组占比计算,但无法绘制出符合预期的旭日图——预期图需同时展示各分组下基因的FC值,以及分组的占比结构。
示例数据
data = structure(list(Genes = c("G1", "G2", "G3", "G4", "G5", "G6", "G7", "G8", "G9", "G10", "G11", "G12", "G13", "G14", "G15"), Group = c("S1", "S1", "S1", "S2", "S2", "S2", "S3", "S3", "S3", "S3", "S4", "S4", "S5", "S5", "S5"), FC = c(2.2, 1.4, 8.5, 6.7, 3.5, 4.1, 9.2, 2.8, 1.7, 5.4, 3.3, 2.9, 7.1, 4.5, 1.9)), class = "data.frame", row.names = c(NA, -15L))
已完成的分组占比计算
# 计算每个分组的基因数量 group_counts <- data %>% group_by(Group) %>% summarize(Count = n()) # 计算分组占比 group_counts <- group_counts %>% mutate(Percentage = Count / sum(Count) * 100) # 合并到原始数据 data <- data %>% left_join(group_counts, by = "Group")
解决方案:用Plotly绘制旭日图
要实现同时展示分组占比和基因FC值的旭日图,可使用plotly包构建层级化数据并绘图:
1. 安装并加载依赖包
install.packages(c("dplyr", "plotly")) library(dplyr) library(plotly)
2. 构建旭日图层级数据
旭日图需要明确的父子节点层级,我们添加顶层节点、分组节点、基因节点三级结构:
# 顶层节点:代表所有差异表达基因 top_level <- data.frame( id = "所有DEGs", parent = "", value = nrow(data), FC = NA, Percentage = 100 ) # 分组节点:关联到顶层节点,携带基因数量和占比信息 group_level <- group_counts %>% mutate( id = Group, parent = "所有DEGs", FC = NA ) %>% select(id, parent, value = Count, FC, Percentage) # 基因节点:关联到对应分组,携带FC值信息 gene_level <- data %>% mutate( id = Genes, parent = Group, value = FC, Percentage = NA ) %>% select(id, parent, value, FC, Percentage) # 合并三级数据 sunburst_data <- bind_rows(top_level, group_level, gene_level)
3. 绘制旭日图
plot_ly( data = sunburst_data, ids = ~id, labels = ~id, parents = ~parent, values = ~value, type = "sunburst", branchvalues = "total", hoverinfo = "text", # 自定义hover提示内容 text = ~ifelse(is.na(FC), paste0(id, "<br>基因数: ", value, "<br>占比: ", round(Percentage, 1), "%"), paste0(id, "<br>FC值: ", FC)) ) %>% layout( title = "差异表达基因分组占比及FC值旭日图", margin = list(l = 0, r = 0, b = 0, t = 40) )
效果说明
- 内层环形对应分组,鼠标悬停可查看分组的基因数量及占比
- 外层小扇形对应单个基因,鼠标悬停可查看该基因的FC值
branchvalues = "total"参数确保分组扇形大小匹配基因数量占比,基因扇形大小匹配FC值的相对大小
内容的提问来源于stack exchange,提问作者nicholaspooran
相关产品推荐
相关产品推荐

