最近在基迪奥平台上看到了这张KEGG富集信息图,刚好手头有批现成的转录组数据,刚好绘制一下给富集图换换风格~~
准备输入文件
平台上的输入文件是直接可以用来出图,这里前期我们需要对结果调整一下~输入文件就只需要富集到的pathway及对应的Count信息,再根据KEGG对应关系将前俩层级的信息merge到一起即可。这里方法有挺多,可以自己写script解析KEGG的pathway层级关系,也有一些R包或者在线网址可获取,动手google。这里我只取每个Pathway1类别中p值从小到大排名前5的作为演示。
## 加载所需R包 sapply(c('ggplot2','RColorBrewer','tidyverse'), require, character.only = TRUE) ## 读取KEGG富集结果文件 ## 取pvalue前5的pathway kegg_bar <- read.delim('../Data/test_keggBar.txt') %>% group_by(Pathway1) %>% top_n(n = -5,wt = pvalue) ## 按照pvalue排名前5的pathway ## 取因子排名顺序,后面用到 ft <- unique(kegg_bar$Pathway1)
增添表中信息
## pathway3列中增添pathway的信息,并设置Count为0 kegg_bar %>% distinct(Pathway1,.keep_all = T) %>% mutate(Pathway3 = Pathway1,Count = 0) -> a ## 合并为一起,按照Pathway和Count进行排序,并选取所需列 kegg_bar <- rbind(kegg_bar,a) %>% arrange(Pathway1,Count) %>% select(Pathway1,Pathway3,Count,pvalue) ##添加一列Label,Count为0 的 标记为空 kegg_bar$Label <- ifelse(kegg_bar$Count == 0," ",kegg_bar$Count) # 按照之前预设的因子排序 kegg_bar$Pathway1 <- factor(kegg_bar$Pathway1,levels = ft) kegg_bar <- kegg_bar[order(kegg_bar$Pathway1),] ## 设置因子水平 kegg_bar$Pathway3 <- kegg_bar$Pathway3 %>% factor() %>% fct_inorder() %>% fct_rev()
整理好的表格如下:
Pathway3中第一行为Pathway1大类,数值为0,Label为空。
作图
p1 <- ggplot(kegg_bar,aes(x = Count,Pathway3,fill = Pathway1))+ geom_col()+ geom_text(aes(label =Label),size = 2.5,hjust = "left",nudge_x = 0.1)+ ## 添加标签 scale_x_continuous(limits = c(0,20.5),expand = expansion(mult = c(0,.1)))+ # 避免文字溢出 labs(x = "Number of Gene",y = "",title = "KEGG pathway anotation")+ scale_fill_brewer(palette = 'Set1') p1
主题设置
首先获取其中配色信息,将图中的大类改为黑色,然后设置常规的主题信息即可。
## 复制 p2 <- p1 ## 获取配色 g <- ggplot_build(p2) mycol <- g$data[[1]]["fill"] col <- rev(mycol$fill) ## 将Aclass对应的颜色改为黑色 num <- rev(kegg_bar$Count) index <- which(num == 0) col[index] <- "grey10" ## 自定义主题 my_theme <- theme_bw()+theme(plot.title = element_text(size = rel(1),hjust = 0.2,face = 'bold'), axis.title = element_text(size = rel(1)), axis.text.y = element_text(size = rel(0.85), colour = col,face = 'bold'), legend.position = "none", plot.margin = unit(x = c(top.mar = 0.2, right.mar = 0.2, left.mar=0.2, bottom.mar= 0.2),units = 'inches')) plot <- p2+my_theme1 plot ggsave('./KEGG_bar.pdf', plot, width = 8, height = 10)