❝本节来介绍如何使用「ggplot2」来绘制热图并添加双向箭头添加注释,下面小编通过一个案例来进行展示,图形仅供展示用,希望各位观众老爷能够喜欢。。❞
library(tidyverse)
library(readxl)
library(magrittr)
library(grid)
library(cowplot)
# 从Excel文件中读取数据,并设置行名
df <- read_excel("F1.xlsx", sheet = "Fig 1c KEGG module") %>%
column_to_rownames(var="...1")
# 对数据进行预处理,只选取前60行和前13列,并进行数据透视
df2 <- df %>% rownames_to_column(var="ID") %>% head(60) %>% select(1:13) %>%
pivot_longer(-1) %>% set_colnames(c("ID","name","value"))
p <- df2 %>%
ggplot(aes(name,ID,fill=value))+ # 设置ggplot的aes参数
geom_tile()+ # 使用geom_tile()添加瓦片
coord_cartesian(clip = "off") + # 关闭坐标轴裁剪
labs(x=NULL,y=NULL)+ # 移除x和y轴标签
scale_y_discrete(expand=c(0,0),position="right")+ # 设置y轴
scale_x_discrete(expand=c(0,0))+ # 设置x轴
scale_fill_gradient2(mid="#FBFEF9",low="#0C6291",high="#A63446") + # 设置填充颜色
coord_cartesian(clip = "off") + # 再次关闭坐标轴裁剪(可能是重复的步骤)
theme_test()+ # 使用theme_test主题
theme(axis.text.x=element_text(color="black",size=8,face="bold",angle = 90,vjust=0.5), # 自定义x轴文本
axis.text.y=element_text(color="black",size=8,face="bold",angle = 0,vjust=0.5), # 自定义y轴文本
axis.ticks = element_blank(), # 移除轴刻度
legend.title = element_blank(), # 移除图例标题
legend.background = element_blank(), # 设置图例背景为透明
legend.text = element_text(size=8,color="black",face="bold"), # 自定义图例文本
legend.position =c(-0.2,0.9), # 设置图例位置
legend.spacing.x = unit(0.01,"in"), # 设置图例内部的水平间距
plot.margin = ggplot2::margin(10,60,10,60)) # 设置图的边距
# 使用cowplot的ggdraw和draw_plot函数来组合图形和其他元素
ggdraw(xlim = c(0, 1.1), ylim = c(0,1))+ # 设置绘图区域的界限
draw_plot(p,x = 0, y =0) + # 添加主图(热图)
draw_line(x = c(0.9,0.9), y = c(0.08,0.98),lineend = "butt",size =1, col = "grey80", # 添加箭头
arrow=arrow(angle = 30, length = unit(0.4,"inches"),ends = "both", type = "closed"))+
draw_grob(grid::grid.rect(gp=grid::gpar(fill="grey80",col="grey80")),x=0.875,y=0.11,height = 0.85,width=0.05)+ # 添加一个灰色的矩形
draw_text(text = "EDC genes", size = 12, x = 0.9, y = 0.55, angle = 90,color="black",fontface = "bold",hjust = 0.5) # 添加文本标签