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

gggenes绘制基因簇图的标题、布局与未知基因配色调整问题

gggenes基因簇绘图常见问题解决方案

修正后可直接运行的完整代码

library(ggplot2)
library(gggenes)

# 数据准备部分(按原有逻辑保留)
# 1. 构建BGC1数据框,包含Molecule、start1、end1、Genes、strand1、orientation1共6列
#    Molecule列固定值为"Staphyloxanthin synthesis-related BGC",对应21个基因的位点、名称、链方向、朝向信息
# 2. 构建标签向量C1:仅crtO、crtP、crtQ、crtM、crtN 5个关键基因保留名称,其余位置填空值
# 3. 预处理Genes列,为后续未知基因配色做准备
BGC1$Genes[BGC1$Genes == "unknown"] <- NA

# 核心绘图
ggplot(BGC1, aes(xmin = start1, xmax = end1, y = "", fill = Genes, forward = orientation1, label = C1)) +
  geom_gene_arrow() +
  geom_gene_label(y = 1.03, size = 3.5) +
  # 分面设置,支持自定义标题
  facet_wrap(
    ~Molecule, 
    scales = "free", 
    ncol = 1,
    labeller = labeller(Molecule = c(
      "Staphyloxanthin synthesis-related BGC" = "这里替换为你需要的自定义分面标题"
    ))
  ) +
  # 配色设置:unknown基因填充白色,其余沿用Set2调色板,且unknown不进入图例
  scale_fill_brewer(
    palette = "Set2",
    na.value = "white",
    breaks = unique(na.omit(BGC1$Genes))
  ) +
  labs(x = "locus (bp)") +
  theme_minimal() +
  # 主题调整:控制标题样式、压缩冗余空白
  theme(
    # 分面标题样式:字号12、左对齐、下边距压缩为2pt
    strip.text = element_text(size = 12, hjust = 0, margin = margin(b = 2)),
    # 面板间距压缩为1mm
    panel.spacing = unit(1, "mm"),
    # 整图边缘留白压缩
    plot.margin = margin(3,3,3,3),
    # 隐藏无意义的y轴元素
    axis.title.y = element_blank(),
    axis.text.y = element_blank(),
    axis.ticks.y = element_blank()
  ) +
  # 压缩y轴默认扩展范围,减少上下空白
  scale_y_discrete(expand = expansion(add = c(0.1, 0.2)))

对应三个问题的具体参数说明

1. 分面标题自定义与样式调整

  • 自定义标题不需要修改原始数据:在facet_wrap()中传入labeller参数,通过命名向量的形式把Molecule列的原始值映射为目标自定义文本即可。
  • 标题大小、位置、边距全部通过theme()中的strip.text参数控制:size调整字号,hjust设置水平对齐(0为左对齐、0.5为居中、1为右对齐),margin参数单独控制标题和绘图区间的上下左右边距,数值越小间距越窄。

2. 压缩冗余空白,收紧布局

冗余空白主要来自三个默认设置,对应调整即可:

  • 各类元素默认边距过大:通过theme()中的panel.spacing控制面板间间距,plot.margin控制整图和画布边缘的间距,strip.text的margin控制分面标题和绘图区的间距,所有边距支持用unit()设置毫米/磅为单位的数值,按需调小即可。
  • 坐标轴默认扩展范围过大:绘图时y轴映射的是空字符串分类变量,ggplot默认会在分类轴两侧留较多空白,通过scale_y_discrete(expand = expansion(add = c(0.1, 0.2)))把y轴上下扩展值调小即可;如果x轴两端留白过多,也可以给scale_x_continuous()加相同的expand参数压缩。
  • 原有代码中geom_gene_label()设置的size=20是远大于常规绘图需求的字号,过大的标签会让ggplot自动预留大量空白放置文字,常规出图字号设为3-4即可满足清晰度要求。另外y轴没有实际生物学含义,直接隐藏y轴的标题、刻度、轴线也能减少无效留白。

3. 未知基因填充色调整

操作分两步:

  • 先预处理数据:把BGC1数据框Genes列中所有值为"unknown"的条目替换为NA。
  • 配色时在scale_fill_brewer()中设置na.value参数:需要白色填充就设为"white",需要完全透明就设为NA。同时通过breaks参数指定图例仅展示非NA的已知基因,避免unknown条目占用图例位置,和Set2调色板的分类色视觉风格适配。

不建议给unknown基因分配Set2调色板内的彩色,Set2仅包含8个分类色,未知基因使用无彩色(白/浅灰)能更好突出功能已知的关键基因。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:51:21