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

如何使用ggplot函数为cnetplot添加基因可成药性分类形状标记

解决cnetplot基因节点叠加可成药性形状错配问题

问题原因

cnetplot()返回的是ggraph类绘图对象,内置的节点数据包含两类节点:

  • 取值为category的通路节点(即你提到的米色通路节点)
  • 取值为gene的基因节点(即你提到的红色基因节点)
    你之前直接调用geom_node_point()时未过滤节点类型,形状映射被应用到了所有节点上,才会出现形状错配、错位的问题。

解决方法

构造可成药性分类的命名映射向量,叠加形状时仅筛选基因节点做映射即可。

完整修正代码

# 构造可成药性命名映射向量
drugs <- fread('genes_dgidb_export.tsv') %>% 
  dplyr::select(Gene, Druggability)
drug_map <- setNames(drugs$Druggability, drugs$Gene)

# 绘制基础cnetplot(与你原有逻辑一致)
options(ggrepel.max.overlaps = Inf)
pother <- cnetplot(gene_of_interest,
                   categorySize ='pvalue', 
                   foldChange = gene_list_scores, 
                  )

pother <- pother + 
  scale_color_gradient2(name='Score', low='steelblue', high='red') +
  scale_size_continuous(range = c(2, 8)) 

# 仅对基因节点叠加可成药性形状标记
pother <- pother +
  geom_node_point(
    # 过滤仅保留基因节点
    data = ~ dplyr::filter(.x, .nodeType == "gene"),
    # 匹配基因名对应的可成药性分类
    aes(shape = drug_map[name]),
    # 调整大小和边框避免被原节点遮挡
    size = 4.5,
    stroke = 1.2
  ) +
  scale_shape_manual(
    name = "可成药性分类",
    # 按你的分类需求指定对应形状
    values = c(
      "KINASE" = 2, 
      "DRUGGABLE GENOME" = 5, 
      "CLINICALLY ACTIONABLE" = 3,
      "OTHER" = 4
    ),
    # 不在可成药性列表中的基因不显示形状、也不生成NA图例
    na.translate = FALSE
  )

# 输出绘图
print(pother)

注意事项

  • 如果你希望无匹配可成药性的基因也显示统一形状,可将na.translate = TRUE,并在values参数中添加NA对应的形状值即可
  • 你可以根据可视化需求调整形状编号:空心形状(编号0-14)不会遮挡原本的基因颜色渐变,实心形状(编号15及以上)会覆盖原有节点颜色

内容的提问来源于stack exchange,提问作者DN1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:33:01