This repository has been archived on 2025-01-13. You can view files and clone it, but cannot push or open issues or pull requests.
CircosHeatmap-R/heatmap_script.R

111 lines
2.9 KiB
R
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 加载所需的包
library(grid)
library(ComplexHeatmap)
library(circlize)
library(RColorBrewer)
library(dendextend)
library(dendsort)
library(gridBase)
# 从命令行获取参数
args <- commandArgs(trailingOnly = TRUE)
# 检查参数数量
if (length(args) != 2) {
stop("请提供两个参数输入CSV文件路径和输出PDF文件路径。", call. = FALSE)
}
# 获取输入CSV文件路径和输出PDF文件路径
input_csv <- args[1]
output_pdf <- args[2]
# 检查输入文件是否存在
if (!file.exists(input_csv)) {
stop("输入文件不存在,请检查路径是否正确。", call. = FALSE)
}
# 加载绘图数据
data <- read.table(file = input_csv, header = TRUE, row.names = 1, sep = ',')
# 查看数据
head(data)
# 转化matrix格式矩阵及数据归一化
data <- as.matrix(data)
cir1 <- t(scale(t(data)))
# 处理 NA 值
cir1[is.na(cir1)] <- 0
# 查看归一化后的数据
head(cir1)
# 定义热图颜色梯度
mycol <- colorRamp2(c(-2.5, 0.3, 3.1), c("blue", "white", "red"))
mycol1 <- colorRamp2(c(-2, 0, 2), c("#003399", "white", "#cccc00"))
# 打开PDF设备
pdf(output_pdf, width = 10, height = 8)
# 默认参数绘制普通热图
Heatmap(cir1, row_names_gp = gpar(fontsize = 6),
column_names_gp = gpar(fontsize = 8),
col = mycol,
name = "legend")
# 计算数据大小范围
range(cir1)
# 绘制基础环形热图
circos.heatmap(cir1, col = mycol)
circos.clear()
# 在circos.heatmap()中添加参数进行环形热图的调整和美化
circos.par(gap.after = c(30))
circos.heatmap(cir1, col = mycol,
dend.side = "inside",
rownames.side = "outside",
rownames.col = "black",
rownames.cex = 1.2,
rownames.font = 1.2,
bg.border = "black",
cluster = TRUE)
circos.clear()
# 聚类树的调整和美化
circos.par(gap.after = c(30))
circos.heatmap(cir1, col = mycol, dend.side = "inside",
rownames.side = "outside",
track.height = 0.28,
rownames.col = "black",
rownames.cex = 1.3,
rownames.font = 1.3,
cluster = TRUE,
dend.track.height = 0.18,
dend.callback = function(dend, m, si) {
color_branches(dend, k = 15, col = 1:15)
})
circos.clear()
# 添加图例标签等
lg <- Legend(title = "Exp", col_fun = mycol,
direction = c("vertical"))
grid.draw(lg)
# 添加列名
circos.track(track.index = get.current.track.index(), panel.fun = function(x, y) {
if (CELL_META$sector.numeric.index == 1) {
cn <- colnames(cir1)
n <- length(cn)
circos.text(rep(CELL_META$cell.xlim[2], n) + convert_x(0.5, "mm"),
1:n + 5,
cn, cex = 0.6, adj = c(0, 0.5), facing = "inside")
}
}, bg.border = NA)
circos.clear()
# 关闭PDF设备
dev.off()
message("热图已成功保存到: ", output_pdf)