You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何绘制包含分组占比与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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:32:12