SCI图片复现:复杂热图

从头到尾的完整代码,包括生成示例数据、处理数据、绘制热图及相关注释、绘制柱状图以及保存为 PDF 文件:根据自己数据调整

# 生成数据矩阵
LU_matrix <- matrix(runif(200, 0, 0.5), nrow = 10, ncol = 20)
RD_matrix <- matrix(runif(340, -0.5, 0), nrow = 17, ncol = 20)
RU_matrix <- matrix(runif(20, -0.5, 0), nrow = 10, ncol = 2)
LD_matrix <- matrix(runif(34, 0, 0.5), nrow = 17, ncol = 2)

data <- rbind(cbind(LU_matrix, RU_matrix), cbind(RD_matrix, LD_matrix))

# 生成示例行名和列名
rownames(data) <- paste("Gene", seq(1, nrow(data)), sep = "_")
colnames(data) <- paste("Sample", seq(1, ncol(data)), sep = "_")

# 生成p值矩阵和T_data矩阵
p_data <- matrix(runif(27 * 22, 0, 0.1), nrow = 27, ncol = 22)
T_data <- matrix(runif(27 * 22, 0, 0.1), nrow = 27, ncol = 22)
T_data <- T_data > 0.05

# 显示前几行数据
head(data)

# 加载所需库
library(ComplexHeatmap)
library(circlize)
library(ggplot2)

# 设置颜色
col_fun <- colorRamp2(c(-0.5, -0.1, 0.1, 0.5), c("#5296cc", "#cad5f9", "#fdedf6", "#f064af"))

# 绘制热图并保存为PDF
pdf("Heatmap.pdf", height = 6, width = 7)
Heatmap(data, 
        col = col_fun,
        rect_gp = gpar(col = "white", lwd = 1),
        column_dend_height = unit(2, "cm"),
        row_dend_width = unit(2, "cm"),
        row_names_gp = gpar(fontsize = 7, fontface = "italic", col = c(rep("#ff339f", 10), rep("#5facee", 17))),
        column_names_gp = gpar(fontsize = 7),
        cell_fun = function(j, i, x, y, width, height, fill) {
          if (p_data[i, j] < 0.01) {
            grid.text(sprintf("*  ", data[i, j]), x, y, gp = gpar(fontsize = 8))
          } else if (p_data[i, j] < 0.05) {
            grid.text(sprintf("+   ", data[i, j]), x, y, gp = gpar(fontsize = 6))
          } else {
            grid.text(sprintf("", data[i, j]), x, y, gp = gpar(fontsize = 6))
          }
          if (T_data[i, j]) {
            grid.text(sprintf("   #", data[i, j]), x, y, gp = gpar(fontsize = 6))
          } else {
            grid.text(sprintf("", data[i, j]), x, y, gp = gpar(fontsize = 6))
          }
        },
        show_heatmap_legend = FALSE,
        column_dend_reorder = FALSE
)

# 图例参数
lgd <- Legend(col_fun = col_fun, 
              at = c(-0.5, 0, 0.5),
              title = "Spearman's correlation",
              legend_height = unit(2, "cm"),
              title_position = "topcenter",
              title_gp = gpar(fontsize = 8),
              labels_gp = gpar(fontsize = 8),
              direction = "horizontal",
              grid_height = unit(4, "mm")
)

# 绘制图例
draw(lgd, x = unit(0.9, "npc"), y = unit(0.95, "npc"))

dev.off()

# 添加柱状图
bar_data <- as.data.frame(rowSums(data))
colnames(bar_data) <- "lncMSE"
bar_data$group <- "Pos"
bar_data$group[which(bar_data$lncMSE < 0)] <- "Neg"

ggplot(data = bar_data) +
  geom_bar(aes(x = rev(1:27),
               y = abs(lncMSE), fill = group), stat = "identity") +
  scale_fill_manual(values = c("#ff339f", "#5facee")) +
  coord_flip() +
  xlab("") +
  ylab("%lncMSE") +
  theme_classic() +
  theme(legend.position = "none",
        axis.ticks.y = element_blank(),
        axis.text.y = element_blank(),
        axis.line.y = element_blank()) +
  scale_y_continuous(breaks = c(0:6))

ggsave("barplot.pdf", height = 6, width = 2.5)

阅读剩余
THE END