2025-08-24 小马的acRIP metagene plot

分组的图

# ==============================

# 分组 metagene plot 脚本(Sham vs SNI)

# ==============================

library(Guitar)

library(rtracklayer)

library(TxDb.Mmusculus.UCSC.mm10.knownGene)

library(GenomicRanges)

# 1. 定义文件夹和文件

folder_path <- "F:/data/ac4crip"

sham_files <- c("Sham2_summits.bed", "Sham3_summits.bed", "Sham4_summits.bed")

sni_files  <- c("SNI1_summits.bed", "SNI2_summits.bed", "SNI4_summits.bed")

all_files <- c(sham_files, sni_files)

all_groups <- c(rep("Sham", length(sham_files)), rep("SNI", length(sni_files)))

# 2. 循环处理每个 BED 文件

bed_paths <- c()

for (i in seq_along(all_files)) {

  file_name <- all_files[i]

  group_name <- all_groups[i]


  bed_path <- file.path(folder_path, file_name)

  bed <- import(bed_path, format="bed")


  # 添加 chr 前缀

  bed_ucsc <- GRanges(

    seqnames = paste0("chr", seqnames(bed)),

    ranges = ranges(bed),

    strand = strand(bed),

    mcols = mcols(bed)

  )


  # chrMT -> chrM

  seqlevels(bed_ucsc)[seqlevels(bed_ucsc) == "chrMT"] <- "chrM"


  # 过滤非标准染色体

  valid_chr <- seqlevels(TxDb.Mmusculus.UCSC.mm10.knownGene)

  valid_chr <- valid_chr[grep("^chr[0-9XYM]+$", valid_chr)]

  bed_filtered <- bed_ucsc[seqnames(bed_ucsc) %in% valid_chr]


  # 导出处理后的 BED 文件

  output_file <- file.path(folder_path, sub("summits.bed", "summits_UCSC_final.bed", file_name))

  export(bed_filtered, con = output_file)


  bed_paths <- c(bed_paths, output_file)

}

# 3. 绘制分组 metagene plot

p <- GuitarPlot(

    txTxdb = TxDb.Mmusculus.UCSC.mm10.knownGene,

    stBedFiles = bed_paths,

    headOrtail = FALSE,

    enableCI = FALSE,               

    mapFilterTranscript = TRUE,

    pltTxType = "mrna",

    stGroupName = all_groups

)

# 美化:白色背景 + 坐标轴清晰 + 字体调整

p <- p +

    theme_bw(base_size = 14) +  # 白色背景,基础字体 14

    theme(

        panel.grid.major = element_line(color = "grey90"), # 主网格线浅灰

        panel.grid.minor = element_blank(),                # 去掉次网格线

        axis.text = element_text(color = "black"),        # 坐标轴文字黑色

        axis.title = element_text(face = "bold"),          # 坐标轴标题加粗

        legend.position = "right",                        # 图例放右边

        legend.title = element_text(face = "bold")        # 图例标题加粗

    )

print(p)

# 4. 输出 PDF

pdf(file.path(folder_path, "Sham_vs_SNI_metagene_plot.pdf"), width=8, height=6)

print(p)

dev.off()

六个样本不分组的图

library(Guitar)

library(rtracklayer)

library(GenomicRanges)

# ==============================

# 1) 文件路径和样本

# ==============================

folder_path <- "F:/data/"

sample_files <- c(

  "Sham2_summits.bed", "Sham3_summits.bed", "Sham4_summits.bed",

  "SNI1_summits.bed", "SNI2_summits.bed", "SNI4_summits.bed"

)

sample_names <- c("Sham2","Sham3","Sham4","SNI1","SNI2","SNI4")

bed_paths <- c()

# ==============================

# 2) 循环处理每个 BED 文件

# ==============================

for (i in seq_along(sample_files)) {

  bed_path <- file.path(folder_path, sample_files[i])

  bed <- import(bed_path, format="bed")

  # 添加 chr 前缀

  bed_ucsc <- GRanges(

    seqnames = paste0("chr", seqnames(bed)),

    ranges = ranges(bed),

    strand = strand(bed),

    mcols = mcols(bed)

  )

  seqlevels(bed_ucsc)[seqlevels(bed_ucsc)=="chrMT"] <- "chrM"

  # 过滤非标准染色体、长度>0、非 NA

  valid_chr <- seqlevels(TxDb.Mmusculus.UCSC.mm10.knownGene)

  valid_chr <- valid_chr[grep("^chr[0-9XYM]+$", valid_chr)]

  bed_filtered <- bed_ucsc[

    seqnames(bed_ucsc) %in% valid_chr &

    width(bed_ucsc) > 0 &

    !is.na(start(bed_ucsc)) &

    !is.na(end(bed_ucsc))

  ]

  # 去掉 mcols NA

  if (length(bed_filtered) > 0) {

    mcols(bed_filtered) <- mcols(bed_filtered)[

      rowSums(is.na(as.data.frame(mcols(bed_filtered))))==0, , drop=FALSE

    ]

  }

  if (length(bed_filtered) == 0) next

  # 导出处理后的 BED 文件

  output_file <- file.path(folder_path, sub("summits.bed","summits_UCSC_final.bed",sample_files[i]))

  export(bed_filtered, con=output_file)

  bed_paths <- c(bed_paths, output_file)

}

# ==============================

# 3) 读取转录组数据库

# ==============================

txdb_file <- system.file("extdata", "mm10_toy.sqlite", package="Guitar")

txdb <- loadDb(txdb_file)

# ==============================

# 4) 构建 GuitarPlot 对象

# ==============================

guitar_obj <- GuitarPlot(

  txTxdb = txdb,

  stBedFiles = bed_paths,      # 必须是文件路径

  stGroupName = sample_names,

  pltTxType = "mrna",

  headOrtail = FALSE,

  enableCI = FALSE,

  mapFilterTranscript = TRUE

)

# ==============================

# 5) 输出 PDF

# ==============================

library(ggplot2)

ggsave("6samples_metagene_plot.pdf", plot = guitar_obj, width = 10, height = 6, device = "pdf")

dev.off()

cat("✅ 6 samples metagene plot saved to PDF successfully!\n")

最后美化了一波

# ========== 三种风格对比 ==========

p_bw <- p + theme_bw() +

  theme(panel.grid = element_line(color = "grey90"),

        plot.title = element_text(hjust = 0.5, size = 14))

p_classic <- p + theme_classic() +

  theme(axis.text = element_text(size = 12),

        axis.title = element_text(size = 14))

p_minimal <- p + theme_minimal() +

  theme(panel.grid = element_line(color = "grey85", linetype = "dashed"),

        axis.text = element_text(size = 12))

# ========== 输出 ==========

# 分别保存三张图

ggsave("guitar_bw.pdf", p_bw, width = 7, height = 5)

ggsave("guitar_classic.pdf", p_classic, width = 7, height = 5)

ggsave("guitar_minimal.pdf", p_minimal, width = 7, height = 5)

用的图是

# 极简主题(去掉淡灰网格线)

p_minimal <- p +

  theme_minimal(base_size = 14) +

  theme(

    panel.grid.major = element_blank(),  # 去掉主网格线

    panel.grid.minor = element_blank()  # 去掉次网格线

  )

ggsave("guitar_minimal.pdf", p_minimal, width = 7, height = 5)

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容