欢迎关注R语言数据分析指南
❝本节来复现「nature microbiology」上的一张「热图」,小编在以往传统绘法上加入了一些新的元素感兴趣的观众老爷细细品味,`下面来进行具体介绍,「数据代码已经上传VIP交流群」
❞
❝❞
有需要学习数据可视化的观众老爷欢迎加入小编的VIP群,目前已经上传「2021-2022两年公众号文档数据+代码约200篇左右」包含付费文档,扫描文末尾二维码加小编微信「付费99元」后邀请进群,VIP群1已满员,「有需要的请尽早加入后期考虑涨价」,早进早享受;「一定让你感受到物超所值」,加入小编的VIP如果你有一些让我感兴趣的图表提供示例数据小编若有时间会写成推文发送
加载R包
library(tidyverse)
library(readxl)
library(magrittr)
library(ggdendro)
library(ggtree)
library(patchwork)
导入数据
df <- read_excel("F1.xlsx", sheet = "Fig 1c KEGG module") %>%
column_to_rownames(var="...1")
提取聚类标签
hrdata <- hclust(dist(df)) %>% dendro_data(.,type = "rectangle")
hcdata <- hclust(dist(t(df))) %>% dendro_data(.,type = "rectangle")
绘制聚类树
hc <- hclust(dist(t(df))) %>% ggtree() + layout_dendrogram()+
theme_void()
构建绘图数据
df2 <- df %>% rownames_to_column(var="ID") %>%
pivot_longer(-1) %>%
set_colnames(c("ID","name","value"))
定义因子
df2$ID <- factor(df2$ID,levels = hrdata$labels %>% select(label) %>% pull())
df2$name <- factor(df2$name,levels = hcdata$labels %>% select(label) %>% pull())
绘制热图
heatmap <- df2 %>%
ggplot(aes(name,ID,fill=value))+
geom_tile()+
scale_fill_gradientn(colours = rev(RColorBrewer::brewer.pal(11,"RdBu")))+
theme(axis.title = element_blank(),
axis.ticks = element_blank(),
axis.text = element_blank(),
legend.title = element_blank(),
plot.margin = margin(0.5,0,0,0,unit="cm"))+
guides(fill=guide_colorbar(direction = "vertical",reverse = F,barwidth = unit(.5, "cm"),
barheight = unit(10.2,"cm")))
添加注释
(hc/heatmap)+plot_layout(ncol=1,height =c(0.35,1))+
coord_cartesian(clip="off")+
annotation_custom(grob = grid::textGrob(label = "Shenzhen",hjust=0,
gp=gpar(col="black",cex=1.2)),
xmin=30,xmax=40,ymin=55,ymax=60)+
annotation_custom(grob = grid::textGrob(label = "GunagZhou",hjust=0,
gp=gpar(col="black",cex=1.2)),
xmin=70,xmax=75,ymin=55,ymax=60)+
annotation_custom(grob=rectGrob(gp=gpar(col="#BDE7FF",fill="#BDE7FF")),
xmin=unit(0.3,"native"),xmax=unit(53,"native"),
ymin=unit(44,"native"),ymax=unit(46,"native"))+
annotation_custom(grob=rectGrob(gp=gpar(col="#FFF2E7",fill="#FFF2E7")),
xmin=unit(53.5,"native"),xmax=unit(136,"native"),
ymin=unit(44,"native"),ymax=unit(46,"native"))+
annotation_custom(grob = grid::textGrob(label = "COPD",hjust=0,
gp=gpar(col="black",cex=1)),
xmin=20,xmax=30,ymin=44,ymax=46)+
annotation_custom(grob = grid::textGrob(label = "Healthy",hjust=0,
gp=gpar(col="black",cex=1)),
xmin=85,xmax=95,ymin=44,ymax=46)
❝本节介绍到此结束,由于作者只提供了热图数据未提供分组信息,因此小编自己创建了分组结果仅供参考,喜欢的观众老爷欢迎分享转发;「当然更推荐大家加入我的VIP交流群」扫描下方二维码加小编微信「付费99元」后邀请进群,「一定让你感受到物超所值」,「添加小编微信请备注来意,以便高效处理」
❞
小编微信


