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

GOplot绘制ChordDiagram报“Breaks与labels长度不一致”错误的排查与解决

GOplot绘制弦图报错:Breaks and labels are different lengths 的原因与解决办法

错误现象

使用GOplot包绘制弦图时触发错误:

Error in f(): ! Breaks and labels are different lengths

此前使用相同流程未出现问题,需定位原因并解决,且必须继续使用该包统一图形风格。

问题复现代码

library(tidyverse)
library(GOplot)
i_circle <- circle_dat(i_GOterms, i_genelist) %>%
  na.omit() 

chord_i <- chord_dat(data = i_circle, 
                      genes = i_genelist, 
                      process = unique(i_circle$term)) 

GOChord(chord_i)

数据结构

基因列表(i_genelist)

i_genelist <- structure(list(ID = structure(1:128, levels = c("A1BG", "A2M", 
                                                              "ACTB;ACTG1", "AGT", "AHSG", "ALB", "AMBP", "APLP1", "APOA1", 
                                                              "APOA2", "APOA4", "APOC3", "APOD", "APOE", "APOH", "APP", "AZGP1", 
                                                              "B2M", "B4GAT1", "BCAN", "C1QC", "C1R", "C1S", "C3", "C4A", "C7", 
                                                              "CD14", "CD59", "CDH2", "CFB", "CFH", "CHGA", "CHGB", "CHL1", 
                                                              "CLSTN1", "CLU", "CNDP1", "CNTN1", "CP", "CPE", "CRTAC1", "CSF1", 
                                                              "CSF1R", "CST3", "CTSD", "DAG1", "DKK3", "ECM1", "EFEMP1", "ENPP2", 
                                                              "EPHA4", "EXOC3L4", "F2", "FAM3C", "FBLN1", "FCGBP", "FGA", "FGB", 
                                                              "FGG", "FN1", "FSTL1", "GC", "GM2A", "GRIK1", "HBA1", "HBB", 
                                                              "HP", "HPX", "HSPG2", "IGF2", "IGFBP2", "IGFBP6", "IGFBP7", "IGHA1", 
                                                              "IGHG1", "IGHG2", "IGHG3", "IGKC", "IGLL5;IGLC1", "ITIH2", "ITIH4", 
                                                              "KLK6", "KNG1", "LDHB", "LGALS3BP", "LRG1", "LY6H", "NCAM1", 
                                                              "NCAM2", "NEGR1", "NELL2", "NOV", "NPC2", "NPTXR", "NRCAM", "OGN", 
                                                              "ORM1", "ORM2", "PAM", "PCOLCE", "PCSK1N", "PENK", "PLG", "PLTP", 
                                                              "PSAP", "PTGDS", "RARRES2", "RBP4", "RNASE1", "SCG2", "SCG3", 
                                                              "SCG5", "SERPINA1", "SERPINA3", "SERPINC1", "SERPIND1", "SERPINF1", 
                                                              "SERPING1", "SIRPA;SIRPB1", "SOD3", "SPARCL1", "SPP1", "TF", 
                                                              "TIMP1", "TTR", "VGF", "VSTM2A", "VTN"), class = "factor"), logFC = c(16, 
                                                                                                                                    17, 13, 14, 14, 21, 12, 16, 17, 13, 15, 11, 15, 18, 14, 13, 15, 
                                                                                                                                    16, 13, 14, 12, 13, 11, 18, 17, 11, 13, 14, 14, 14, 15, 15, 14, 
                                                                                                                                    13, 15, 17, 14, 13, 15, 12, 14, 11, 12, 17, 12, 11, 14, 12, 14, 
                                                                                                                                    15, 10, 12, 15, 13, 15, 12, 15, 12, 12, 16, 11, 16, 11, 13, 15, 
                                                                                                                                    16, 17, 17, 10, 12, 12, 11, 14, 14, 18, 14, 16, 16, 13, 12, 11, 
                                                                                                                                    13, 16, 12, 12, 13, 11, 14, 11, 12, 14, 11, 13, 13, 13, 14, 15, 
                                                                                                                                    14, 13, 11, 14, 12, 12, 12, 12, 17, 12, 13, 12, 12, 12, 13, 18, 
                                                                                                                                    15, 13, 11, 16, 15, 14, 12, 16, 12, 19, 11, 16, 15, 12, 14)), row.names = c(NA, 
                                                                                                                                                                                                                -128L), class = "data.frame")

GO注释结果(i_GOterms)

i_GOterms <- structure(list(Category = c("GOTERM_BP_DIRECT", "GOTERM_BP_DIRECT",                          
                                         "GOTERM_BP_DIRECT", "GOTERM_BP_DIRECT", "GOTERM_BP_DIRECT", "GOTERM_BP_DIRECT", 
                                         "GOTERM_BP_DIRECT", "GOTERM_BP_DIRECT", "GOTERM_BP_DIRECT", "GOTERM_BP_DIRECT", 
                                         "GOTERM_BP_DIRECT", "GOTERM_BP_DIRECT", "GOTERM_BP_DIRECT", "GOTERM_BP_DIRECT", 
                                         "GOTERM_BP_DIRECT", "GOTERM_BP_DIRECT", "GOTERM_BP_DIRECT", "GOTERM_BP_DIRECT", 
                                         "GOTERM_BP_DIRECT", "GOTERM_BP_DIRECT"), Term = c("inflammatory response", 
                                                                                           "defense response to bacterium", "plasminogen activation", "positive regulation of B cell activation", 
                                                                                           "phagocytosis, recognition", "high-density lipoprotein particle assembly", 
                                                                                           "negative regulation of fibrinolysis", "negative regulation of blood coagulation", 
                                                                                           "phagocytosis, engulfment", "positive regulation of peptidase activity", 
                                                                                           "protein localization to secretory granule", "protein polymerization", 
                                                                                           "complement activation, alternative pathway", "axon guidance", 
                                                                                           "cholesterol metabolic process", "B cell receptor signaling pathway", 
                                                                                           "negative regulation of very-low-density lipoprotein particle remodeling", 
                                                                                           "regulation of beta-amyloid clearance", "aging", "positive regulation of phagocytosis"
                                         ), Genes = c("SERPINA3, CSF1R, ECM1, ORM1, CSF1, RARRES2, HSPG2, KNG1, C3, C4A, SPP1, CD14, SCG2", 
                                                      "CHGA, IGHG3, IGLL5, IGHG1, IGHG2, VGF, IGKC, HP, IGLC1, IGHA1", 
                                                      "FGB, FGA, APOH, FGG", "IGHG3, IGLL5, IGHG1, IGHG2, IGKC, IGLC1, IGHA1", 
                                                      "IGHG3, IGLL5, IGHG1, IGHG2, IGKC, IGLC1, IGHA1", "APOA2, APOA1, APOA4, APOE", 
                                                      "VTN, APOH, PLG, F2", "VTN, APOH, APOE, KNG1", "IGHG3, IGLL5, IGHG1, IGHG2, IGKC, IGLC1, IGHA1", 
                                                      "APP, FN1, FBLN1, PCOLCE", "CHGA, CPE, SCG3", "FGB, FGA, VTN, FGG", 
                                                      "C3, CFH, C7, CFB", "NELL2, EPHA4, CSF1R, B4GAT1, CHL1, DAG1, CNTN1, NRCAM", 
                                                      "APP, NPC2, APOA2, APOA1, APOA4, APOE", "IGHG3, IGLL5, IGHG1, IGHG2, IGKC, IGLC1, IGHA1", 
                                                      "APOA2, APOC3, APOA1", "APP, APOE, CLU", "SERPINF1, PENK, IGFBP2, DAG1, SERPING1, APOD, TIMP1, AGT", 
                                                      "AHSG, APOA2, SIRPA, APOA1, SIRPB1"), adj_pval = c(0, 0, 0, 0, 
                                                                                                         0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), row.names = c(NA, 
                                                                                                                                                                         -20L), class = "data.frame")

错误原因分析

核心问题在于基因ID格式不匹配:

  1. i_genelist中存在以分号合并的基因ID(如IGLL5;IGLC1、SIRPA;SIRPB1),而i_GOterms中对应的是单个基因名(如IGLL5、SIRPA),导致circle_dat生成的结果中部分基因因无法匹配被na.omit()过滤。
  2. GOChord函数在计算logFC的颜色梯度时,内部会基于匹配的基因生成刻度断点(breaks)和标签(labels),基因格式不一致会打乱这两者的数量对应关系,最终触发Breaks and labels are different lengths错误。

解决办法

通过预处理统一基因ID格式,确保i_genelist和i_GOterms中的基因名称完全匹配,这里采用拆分合并基因的方案:

library(tidyverse)
library(GOplot)

# 1. 拆分i_genelist中用分号分隔的基因ID,每个基因单独成一行
i_genelist_split <- i_genelist %>%
  separate_rows(ID, sep = ";") %>%
  mutate(ID = trimws(ID)) # 去除基因名可能带的空格

# 2. 清理i_GOterms的Genes列,去除基因间的空格(避免匹配失败)
i_GOterms_clean <- i_GOterms %>%
  mutate(Genes = str_replace_all(Genes, " ", ""))

# 3. 重新生成绘图所需数据并绘制弦图
i_circle <- circle_dat(i_GOterms_clean, i_genelist_split) %>%
  na.omit() 

chord_i <- chord_dat(data = i_circle, 
                      genes = i_genelist_split, 
                      process = unique(i_circle$term)) 

GOChord(chord_i)

该方案将合并的基因拆分为单个条目,确保与GO注释中的基因名完全匹配,同时修复了内部颜色映射的刻度数量不一致问题,可正常生成弦图。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:20:47