使用aplot绘制ggplot版本加聚类的heatmap

之前推文差异分析一条代码解决 得到差异计算函数

一条代码完成无限分组的微生物差异分析

准备:差异分析(选择非参数检验)

这个函数的使用参考一条代码完成完成无限分组的微生物差异分析

#--ggplot版本热图
library(ggClusterNet)
library(phyloseq)
library(tidyverse)
library(ggtree)
library(aplot)

#---ps数据为ggClusterNet内置,也可以公众号后台回复 数据,从中找到ps_liu.rds,导入即为这个数据
data(ps)
# sample_data(ps)
#--- different analysis

source("G:\\Shared_Folder\\Function_local\\R_function\\GC-MS\\wlxSuper_GCMS.R")

group1 = c("WT","OE")
group2 = c("WT","KO")
b= data.frame(group1,group2)
b
## group1 group2
## 1 WT WT
## 2 OE KO
result = statSuper(ps = ps,group = "Group",artGroup = b,method = "wilcox")## [1] "WT" "OE"
## [1] "WT" "KO"
## num [1:2861, 1:3] 3.35993 0.02388 0.01837 0.62034 0.00651 ...
## - attr(*, "dimnames")=List of 2
## ..$ : chr [1:2861] "ASV_1" "ASV_1591" "ASV_657" "ASV_28" ...
## ..$ : chr [1:3] "KO" "OE" "WT"
# str_c(c(b[[1]],"fdr"),collapse = "_")
difres <- result %>% filter(WT_KO_fdr < 0.05 & WT_OE_fdr < 0.05)
head(difres)
write.csv(difres,"./difres.csv")

备注:如果没有以上部分的运行直接后台数据aplot:得到difres数据用于后续分析

pheatmap版本

pheatmap运用于热图比较常见,因为使用起来一条代码,十分方便,只是封装过于严重,无法使用ggplot语法。

data <- difres[,c(sample_names(ps))]
head(data)
## KO1 KO2 KO3 KO4 KO5 KO6
## 1 3.349181512 5.4462433 2.094939796 3.600482864 2.726572529 2.942131760
## 2 0.018054887 0.0083022 0.028240610 0.005248517 0.012836970 0.021653224
## 3 0.012036591 0.0249066 0.015403969 0.015745552 0.017971759 0.024359877
## 4 0.006018296 0.0000000 0.002567328 0.000000000 0.000000000 0.008119959
## 5 0.012036591 0.0027674 0.000000000 0.005248517 0.002567394 0.010826612
## 6 0.012036591 0.0249066 0.023105954 0.002624259 0.015404365 0.005413306
## OE1 OE2 OE3 OE4 OE5 OE6
## 1 3.915281931 4.932505725 3.950103950 2.920284136 3.743058682 3.173265937
## 2 0.006165798 0.015065686 0.005775006 0.003035638 0.006003302 0.015601111
## 3 0.018497395 0.018078824 0.011550012 0.015178192 0.018009905 0.031202222
## 4 0.006165798 0.000000000 0.005775006 0.006071277 0.006003302 0.000000000
## 5 0.024663193 0.021091961 0.028875029 0.024285107 0.018009905 0.015601111
## 6 0.009248697 0.009039412 0.000000000 0.006071277 0.009004953 0.003120222
## WT1 WT2 WT3 WT4 WT5 WT6
## 1 6.270221129 6.611613307 4.708391436 5.428246384 3.838971294 4.188622433
## 2 0.002673868 0.002605049 0.002734258 0.005417412 0.002667805 0.013442306
## 3 0.002673868 0.002605049 0.002734258 0.005417412 0.000000000 0.016130767
## 4 0.045455761 0.023445437 0.008202773 0.013543529 0.008003415 0.005376922
## 5 0.018717078 0.013025243 0.010937030 0.008126117 0.013339025 0.016130767
## 6 0.002673868 0.002605049 0.002734258 0.000000000 0.002667805 0.000000000
data$ID = paste(difres$id,difres$Genus,sep = "_")

row.names(data) = data$ID
data$ID = NULL

data[data > 0.3]<-0.3

library(pheatmap)
map = as.data.frame(sample_data(ps))
map
annotation_col = data.frame(map$Group)
rownames(annotation_col) = row.names(map)

g3_1 = pheatmap(data,fontsize=6,cellwidth = 20, cellheight = 10,cluster_rows = TRUE,
color = colorRampPalette(RColorBrewer::brewer.pal(11,"Spectral"))(60),
display_numbers = F,fontsize_col = 10,fontsize_row = 10,
annotation_col = annotation_col)
g3_1

早先的气泡图版本 ggplot

pheatmap中元素比较单一,我们想使用其他的一些元素似乎就比较难的, 比如下面的圆心,典型的气泡图就是这样,但是无法有丰富的注释类型。

#-------- 气泡图#-
library(reshape2)

head(data)data$id = row.names(data)
pcm = melt(data, id = c("id"))
head(pcm)
## id variable value
## 1 ASV_1_Unassigned KO1 0.300000000
## 2 ASV_1095_Unassigned KO1 0.018054887
## 3 ASV_1139_Sphingomonas KO1 0.012036591
## 4 ASV_1215_Unassigned KO1 0.006018296
## 5 ASV_1235_Haliangium KO1 0.012036591
## 6 ASV_1350_Brevundimonas KO1 0.012036591
# pcm$ID <- factor(pcm$ID,levels=unique(pcm$ID))

colours = c( "#A54657", "#582630", "#F7EE7F", "#4DAA57","#F1A66A","#F26157", "#F9ECCC", "#679289", "#33658A",
"#F6AE2D","#86BBD8")
#----样本在y轴上
g3_2 = ggplot(pcm, aes(y = id, x = variable)) +
geom_point(aes(size = value,fill = value), alpha = 0.75, shape = 21) +
scale_size_continuous(limits = c(0.000001, 100), range = c(2,25), breaks = c(0.1,0.5,1)) +
labs( y= "", x = "", size = "Relative Abundance (%)", fill = "") +
# scale_fill_manual(values = colours, guide = FALSE) +
scale_x_discrete(limits = rev(levels(pcm$variable))) +
scale_y_discrete(position = "right")
g3_2

使用aplot组合聚类结果和气泡图

aplot具有很强大的组图,正好实现了ggplot版本的热图,这里我们先进行气泡图的完善。

mat <- data[,-ncol(data)] #drop gene column as now in rows
clust <- hclust(dist(mat %>% as.matrix())) # hclust with distance matrix

ggtree_plot <- ggtree::ggtree(clust)
v_clust <- hclust(dist(mat %>% as.matrix() %>% t()))
ggtree_plot_col <- ggtree(v_clust) + layout_dendrogram()

map = as.data.frame(sample_data(ps))
map$ID = row.names(map)
labels= ggplot(map, aes(x = ID, y=1, fill=Group)) + geom_tile() +
scale_fill_brewer(palette = 'Set1',name="Cell Type") +
theme_void()

g3_2 %>%
insert_left(ggtree_plot, width=.2) %>%
insert_top(labels, height=.02) %>%
insert_top(ggtree_plot_col, height=.1)

aplot版本热图

aplot具有强大的组图功能。这里我们修改一下Y叔教程的代码,就可以完成这个热图的绘制。

g3_2 = ggplot(pcm, aes(y = id, x = variable)) +
# geom_point(aes(size = value,fill = value), alpha = 0.75, shape = 21) +
geom_tile(aes(size = value,fill = value))+
scale_size_continuous(limits = c(0.000001, 100), range = c(2,25), breaks = c(0.1,0.5,1)) +
labs( y= "", x = "", size = "Relative Abundance (%)", fill = "") +
# scale_fill_manual(values = colours, guide = FALSE) +
scale_x_discrete(limits = rev(levels(pcm$variable))) +
scale_y_discrete(position = "right") +
scale_fill_gradientn(colours =colorRampPalette(RColorBrewer::brewer.pal(11,"Spectral"))(60))

g3_2
mat <- data[,-ncol(data)] #drop gene column as now in rows
clust <- hclust(dist(mat %>% as.matrix())) # hclust with distance matrix

ggtree_plot <- ggtree::ggtree(clust)
v_clust <- hclust(dist(mat %>% as.matrix() %>% t()))
ggtree_plot_col <- ggtree(v_clust) + layout_dendrogram()

map = as.data.frame(sample_data(ps))
map$ID = row.names(map)
labels= ggplot(map, aes(x = ID, y=1, fill=Group)) + geom_tile() +
scale_fill_brewer(palette = 'Set1',name="Cell Type") +
theme_void()

g3_2 %>%
insert_left(ggtree_plot, width=.2) %>%
insert_top(labels, height=.02) %>%
insert_top(ggtree_plot_col, height=.1)

微生信生物简介

微生信生物已经创立三年有余了,在这几年中,感谢铁杆分析的支持,同时希望越来越多的小伙伴加入微生信生物大家庭,目前微生信交流群已经超过2000人。帮助许多小伙伴解决的大量问题。

关注统计分析和出图,关注各大组学数据分析流程和各种高级分析。专注解决尚未解决的问题,在分析领域著重创新,时间,问题解决,用于探索发现。

关注R语言,python,perl,shell等语言使用。定期分分享相关学习指南。R语言是使用的比较多的分析语言,会用大量的R语言教程。

根际互作生物学研究室 简介

根际互作生物学研究室是沈其荣教授土壤微生物与有机肥团队下的一个关注于根际互作的研究小组。本小组由袁军副教授带领,主要关注:1.植物和微生物互作在抗病过程中的作用;2 环境微生物大数据整合研究;3 环境代谢组及其与微生物过程研究体系开发和应用。团队在过去三年中在 isme J, Microbiome, PCE,SBB,Horticulture Research等期刊上发表了多篇文章。欢迎关注 微生信生物 公众号对本研究小组进行了解。

了解 交流 合作

  • 团队成员邮箱 袁军:

    junyuan@njau.edu.cn;

    文涛:

    2018203048@njau.edu.cn

  • 团队公众号:

(0)

相关推荐