From 16cd091932be9579d02de1d765365e038eb463db Mon Sep 17 00:00:00 2001 From: freefire <97975089@qq.com> Date: Sun, 12 Jan 2025 03:37:41 +0800 Subject: [PATCH] =?UTF-8?q?add=20=E5=88=A0=E9=99=A4R=E8=84=9A=E6=9C=AC?= =?UTF-8?q?=E4=B8=AD=E5=A4=9A=E4=BD=99=E7=9A=84=E5=9B=BE=E5=BD=A2=E7=BB=98?= =?UTF-8?q?=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- res/heatmap_script.R | 89 +++++++++++++++----------------------------- 1 file changed, 30 insertions(+), 59 deletions(-) diff --git a/res/heatmap_script.R b/res/heatmap_script.R index 78dea87..c954a6e 100644 --- a/res/heatmap_script.R +++ b/res/heatmap_script.R @@ -1,14 +1,11 @@ # Load required packages -suppressPackageStartupMessages(library(grid)) -suppressPackageStartupMessages(library(ComplexHeatmap)) suppressPackageStartupMessages(library(circlize)) suppressPackageStartupMessages(library(RColorBrewer)) +suppressPackageStartupMessages(library(ComplexHeatmap)) suppressPackageStartupMessages(library(dendextend)) -suppressPackageStartupMessages(library(dendsort)) -suppressPackageStartupMessages(library(gridBase)) # Get arguments from the command line -args <- commandArgs(T) +args <- commandArgs(trailingOnly = TRUE) # Check the number of arguments if (length(args) != 2) { @@ -24,23 +21,17 @@ if (!file.exists(input_csv)) { stop("The input file does not exist. Please check the file path.", call. = FALSE) } -# Load the data for plotting -data <- read.table(file = input_csv, header = TRUE, row.names = 1, sep = ',') +# Function to load and preprocess data +load_and_preprocess_data <- function(file_path) { + data <- read.table(file = file_path, header = TRUE, row.names = 1, sep = ',') + data_matrix <- as.matrix(data) + normalized_data <- t(scale(t(data_matrix))) + normalized_data[is.na(normalized_data)] <- 0 + return(normalized_data) +} -# View the data -message("Data loaded successfully. The first few rows are as follows:") -print(head(data)) - -# Convert to matrix format and normalize the data -data <- as.matrix(data) -cir1 <- t(scale(t(data))) - -# Handle NA values -cir1[is.na(cir1)] <- 0 - -# View the normalized data -message("Data normalization successful. The first few rows are as follows:") -print(head(cir1)) +# Load and preprocess data +cir1 <- load_and_preprocess_data(input_csv) # Define the color gradient for the heatmap mycol <- colorRamp2(c(-2.5, 0.3, 3.1), c("blue", "white", "red")) @@ -48,57 +39,37 @@ mycol <- colorRamp2(c(-2.5, 0.3, 3.1), c("blue", "white", "red")) # Open the PDF device pdf(output_pdf, width = 10, height = 8) -# Draw the basic circular heatmap -message("Drawing the basic circular heatmap...") -circos.heatmap(cir1, col = mycol) -circos.clear() - -# Adjust and beautify the circular heatmap in circos.heatmap() -message("Drawing the adjusted and beautified circular heatmap...") +# Draw the adjusted and beautified circular 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.heatmap(cir1, + col = mycol, + dend.side = "inside", + rownames.side = "outside", + rownames.col = "black", + rownames.cex = 1.3, + track.height = 0.35, + cluster = TRUE, + dend.track.height = 0.18, + dend.callback = function(dend, m, si) { + color_branches(dend, k = 15, col = 1:15) + }) -# Adjust and beautify the dendrogram -message("Drawing the circular heatmap with adjusted and beautified dendrogram...") -circos.par(gap.after = c(30)) -circos.heatmap(cir1, col = mycol, dend.side = "inside", - rownames.side = "outside", - track.height = 0.35, - 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) - }) - -# 添加列名 +# Add column names 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) - # Adjust the x and y positions - circos.text(rep(CELL_META$cell.xlim[2], n) + convert_x(0.5, "mm"), - 1:n + 2.5, + circos.text(rep(CELL_META$cell.xlim[2], n) + convert_x(0.5, "mm"), + 1:n + 2.5, cn, cex = 0.6, adj = c(0, 0.5), facing = "inside") } }, bg.border = NA) -# 添加图例 -message("Adding legend labels...") +# Add legend lg <- Legend(title = "Exp", col_fun = mycol, direction = "vertical") grid.draw(lg) -# 清除环形图 +# Clear the circular plot circos.clear() # Close the PDF device