如何使用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
相关产品推荐
相关产品推荐

