分类堆叠柱状图顺序排列及其添加合适条块标签

堆叠柱状图顺序排列及其添加合适条块标签

Tao Wen

2018年12月17日

写在前面:人生嘛,不就是这样,总会有高兴和不高兴,积极和消沉嘛!即便晚上过成了白天,白天过成了晚上。但事情总会过去,有缺憾才完美。

基于phylosep对扩增子下游分析

R语言绘制门类水平堆叠柱状图

有些日子没有更新了,心里面惦记着啥时候推送两篇,今天终于逃课,坐在这里给大家送点干活; 之前有人推荐我使用markdown来编辑推送稿,我就看了一下,花里胡哨的东西没怎么学会,大家凑活着看, 慢慢的我也就能做一篇整齐齐的,清爽的推送。

我也就不做过多的解释了,大家都明白

library("ggalluvial")library("alluvial")library("phyloseq")library("ggplot2")library("dplyr")library("biomformat")library("reshape2")library("plyr")

基于phylosep和dplyr对数据进行输入、预处理和整理

数据形式

# knitr::kable(#   Taxonomies1[1:10,],#   caption = "A knitr kable"# )

构造排序因子

#按照分组求和by_cyl <- group_by(Taxonomies1, SampleType,Genus)  zhnagxu2 = dplyr :: summarise(by_cyl, sum(Abundance))colnames(zhnagxu2) = c("group", "Genus","Abundance")head(zhnagxu2)## # A tibble: 6 x 3##   group Genus            Abundance##   <fct> <fct>                <dbl>## 1 CF    Adhaeribacter        1.55 ## 2 CF    Alicyclobacillus     0.590## 3 CF    Aquicella            0.256## 4 CF    Azoarcus             0.546## 5 CF    Bacillus             6.82 ## 6 CF    Balneimonas          1.81##确定因子,这里通过求和按照从小到大的顺序得到因子##长变宽Taxonomies2 = dcast(Taxonomies1,Genus ~ Sample,value.var = "Abundance")head(Taxonomies2)##              Genus CF1.fastq CF4.fastq CF5.fastq CF6.fastq CK1.fastq## 1    Adhaeribacter 0.4766949        NA 0.6363286 0.4375653 0.3774376## 2 Alicyclobacillus 0.3354520        NA        NA 0.2547022        NA## 3        Aquicella 0.2560028        NA        NA        NA        NA## 4       Arenimonas        NA        NA        NA        NA        NA## 5         Azoarcus        NA 0.2843602        NA 0.2612330        NA## 6         Bacillus 1.6596045 1.0663507 1.3883533 2.7037618 2.2698679
Taxonomies2[is.na(Taxonomies2)] <- 0aa = Taxonomies2# head(aa)n = ncol(aa)#增加一行,为整列的均值,计算每一列的均值,2就是表示列aa[n+1]=apply(aa[,c(2:ncol(aa))],1,sum)bb<- arrange(aa, V14)head(bb)##               Genus CF1.fastq CF4.fastq CF5.fastq CF6.fastq CK1.fastq## 1         Aquicella 0.2560028         0         0         0 0.0000000## 2   Pseudidiomarina 0.0000000         0         0         0 0.2673516## 3 Janthinobacterium 0.0000000         0         0         0 0.2725938## 4        Variovorax 0.2913136         0         0         0 0.0000000## 5     Pedomicrobium 0.0000000         0         0         0 0.0000000## 6        Luteimonas 0.0000000         0         0         0 0.3355001
bb = bb[c(1,ncol(bb))]cc<- arrange(bb, desc(V14))# head(cc)

因子排序变量查看

cc$Genus = as.character(cc$Genus)cc$Genus = as.factor(cc$Genus)cc$Genus

开始对作图分类水平进行按照平均丰度的排序

zhnagxu2$Genus = factor(zhnagxu2$Genus,order = T,levels = cc$Genus)zhnagxu3 = plyr::arrange(zhnagxu2,desc(Genus))head(zhnagxu3)## # A tibble: 6 x 3##   group Genus             Abundance##   <fct> <ord>                 <dbl>## 1 CF    Aquicella             0.256## 2 CK    Pseudidiomarina       0.267## 3 CK    Janthinobacterium     0.273## 4 CF    Variovorax            0.291## 5 OF    Pedomicrobium         0.301## 6 CK    Luteimonas            0.336# ##制作标签坐标,标签位于顶端# Taxonomies_x = ddply(zhnagxu3,"group", transform, label_y = cumsum(Abundance))# head(Taxonomies_x )#标签位于中部Taxonomies_x = ddply(zhnagxu3,"group", transform, label_y = cumsum(Abundance) - 0.5*Abundance)head(Taxonomies_x,20 )##    group                 Genus Abundance    label_y## 1     CF             Aquicella 0.2560028  0.1280014## 2     CF            Variovorax 0.2913136  0.4016596## 3     CF              Azoarcus 0.5455932  0.8201130## 4     CF      Alicyclobacillus 0.5901542  1.3879867## 5     CF              Opitutus 0.6431613  2.0046444## 6     CF     Pseudoxanthomonas 0.3707627  2.5116064## 7     CF           Pontibacter 0.5339744  2.9639750## 8     CF            Rubrivivax 0.3317536  3.3968389## 9     CF          Fimbriimonas 0.7129691  3.9192003## 10    CF           Rhodobacter 0.5965841  4.5739768## 11    CF        Hydrogenophaga 0.7701422  5.2573400## 12    CF Candidatus Solibacter 0.2603162  5.7725692## 13    CF               Thauera 0.2606635  6.0330590## 14    CF           Skermanella 0.6073668  6.4670742## 15    CF       Flavisolibacter 1.4495684  7.4955417## 16    CF               Devosia 1.5499034  8.9952776## 17    CF             Geobacter 0.8809867 10.2107227## 18    CF         Adhaeribacter 1.5505888 11.4265104## 19    CF           Balneimonas 1.8123620 13.1079858## 20    CF           Sphingobium 0.9007005 14.4645170

添加标签 按照堆叠柱子的宽度进行选择是否需要在柱子上添加标签

Taxonomies_x$label = Taxonomies_x$Genus#使用循环将堆叠柱状图柱子比较窄的别写标签,仅仅宽柱子写上标签for(i in 1:nrow(Taxonomies_x)){  if(Taxonomies_x[i,3] > 5){    Taxonomies_x[i,5] = Taxonomies_x[i,5]  }else{    Taxonomies_x[i,5] = NA  }}

定义需要所需要的颜色

出图

##普通柱状图p = china_barplots <- ggplot(Taxonomies_x , aes(x =  group, y = Abundance, fill = Genus, order = Genus)) +  geom_bar(stat = "identity",width = 0.5) +  scale_fill_manual(values = Phylum_colors) +  theme(axis.title.x = element_blank()) +  theme(legend.text=element_text(size=6)) +  scale_y_continuous(name = "Abundance (%)")+  geom_text(aes(y = label_y, label = label ),size = 4)print(china_barplots)## Warning: Removed 81 rows containing missing values (geom_text).

p =p+theme_bw()+  scale_y_continuous(expand = c(0,0))+  #geom_hline(aes(yintercept=0), colour="black", linetype=2) +  #geom_vline(aes(xintercept=0), colour="black", linetype="dashed") +  #scale_fill_manual(values = mi, guide = guide_legend(title = NULL))+  theme(        panel.grid.major=element_blank(),    panel.grid.minor=element_blank(),        plot.title = element_text(vjust = -8.5,hjust = 0.1),    axis.title.y =element_text(size = 20,face = "bold",colour = "black"),    axis.title.x =element_text(size = 24,face = "bold",colour = "black"),    axis.text = element_text(size = 20,face = "bold"),    axis.text.x = element_text(colour = "black",size = 14),    axis.text.y = element_text(colour = "black",size = 14),    legend.text = element_text(size = 10,face = "bold")    #legend.position = "none"#是否删除图例      ) ## Scale for 'y' is already present. Adding another scale for 'y', which## will replace the existing scale.p## Warning: Removed 81 rows containing missing values (geom_text).

#ggsave("./result_and_script/a4_分门别类冲击图/属水平水平柱状图.pdf", p, width = 10, height =8 )

下面开始加上分组之间的连线,方便我们进行横向比较

参考的是冲击图,这里我遇到的困难是如何设置连线流动的映射, 我是人工构建的一套流动映射,可能不是最好的解决方案,好的 一点无序改动,跑就行了。

##柱状图冲击图#stratum定义堆叠柱状图柱子内容,以weight定义柱子长度,alluvium定义连线head(Taxonomies_x )##   group             Genus Abundance   label_y label## 1    CF         Aquicella 0.2560028 0.1280014  <NA>## 2    CF        Variovorax 0.2913136 0.4016596  <NA>## 3    CF          Azoarcus 0.5455932 0.8201130  <NA>## 4    CF  Alicyclobacillus 0.5901542 1.3879867  <NA>## 5    CF          Opitutus 0.6431613 2.0046444  <NA>## 6    CF Pseudoxanthomonas 0.3707627 2.5116064  <NA>cs = Taxonomies_x $Genuscs1 = cs#提取真正的因子的数量lengthfactor = length(levels(cs1))#提取每个因子对应的数量cs3 = summary (as.factor(cs1))cs4 = as.data.frame(cs3)cs4$id = row.names(cs4)#对因子进行排序df_arrange<- arrange(cs4, id)#对Taxonomies_x 对应的列进行排序Taxonomies_x1<- arrange(Taxonomies_x , Genus)head(Taxonomies_x1)##   group        Genus Abundance  label_y        label## 1    CF Kaistobacter 16.512434 66.34180 Kaistobacter## 2    CK Kaistobacter 14.791761 66.46900 Kaistobacter## 3    OF Kaistobacter 14.228975 67.11143 Kaistobacter## 4    CF   Nitrospira 11.613095 52.27904   Nitrospira## 5    CK   Nitrospira  9.342698 54.40177   Nitrospira## 6    OF   Nitrospira 10.635413 54.67924   Nitrospira#构建flow的映射列Taxonomies_x Taxonomies_x1$ID = factor(rep(c(1:lengthfactor), cs4$cs3))#colour = "black",size = 2,,aes(color = "black",size = 0.8)p2 = ggplot(Taxonomies_x1,       aes(x = group, stratum = Genus, alluvium = ID,           weight = Abundance,           fill = Genus, label = Genus)) +  geom_flow(stat = "alluvium", lode.guidance = "rightleft",            color = "black",size = 0.2,width = 0.45,alpha = .2) +  geom_bar(width = 0.45)+  geom_stratum(width = 0.45,size = 0.1) +  #geom_text(stat = "stratum", size = 3) +  #theme(legend.position = "none") +  scale_fill_manual(values = Phylum_colors)+  #ggtitle("fow_plot")+  #scale_x_discrete(limits = c("CK1","CK3","CK5","CK7","CK9","CK11","CK13","CK15","CK17","CK19"))+  geom_text(aes(y = label_y, label = label ),size = 4)+  labs(x="group",       y="Relative abundancce (%)",       title="")p2 =p2+theme_bw()+  scale_y_continuous(expand = c(0,0))+  #geom_hline(aes(yintercept=0), colour="black", linetype=2) +  #geom_vline(aes(xintercept=0), colour="black", linetype="dashed") +  #scale_fill_manual(values = mi, guide = guide_legend(title = NULL))+  theme(        panel.grid.major=element_blank(),    panel.grid.minor=element_blank(),        plot.title = element_text(vjust = -8.5,hjust = 0.1),    axis.title.y =element_text(size = 20,face = "bold",colour = "black"),    axis.title.x =element_text(size = 24,face = "bold",colour = "black"),    axis.text = element_text(size = 20,face = "bold"),    axis.text.x = element_text(colour = "black",size = 14),    axis.text.y = element_text(colour = "black",size = 14),    legend.text = element_text(size = 10,face = "bold")    #legend.position = "none"#是否删除图例      ) p2## Warning: The aesthetic `weight` is deprecated.## Pass arguments to `y` instead.## Warning: The aesthetic `weight` is deprecated.## Pass arguments to `y` instead.## Warning: Removed 81 rows containing missing values (geom_text).

#ggsave("./result_and_script/a4_/flow_plot_bar.pdf", p2, width = 10, height =8 )

(0)

相关推荐

  • R绘图笔记 | GO-BP,GO-MF,GO-CC绘制在同一个柱状图中。

    前面介绍过一些图形的绘制,我们有时候进行GO富集分析,需要绘制富集结果,这里介绍怎么将GO-BP,GO-MF,GO-CC绘制到同一图形中. library(ggplot2)library(RColor ...

  • Python、R对小说进行文本挖掘和层次聚类可视化分析案例

    原文链接:http://tecdat.cn/?p=5673 <第二十二条军规>是美国作家约瑟夫·海勒创作的长篇小说,该小说以第二次世界大战为背景,通过对驻扎在地中海一个名叫皮亚诺扎岛(此岛 ...

  • 实用技术 | 如何用R绘制并填充相对正确的世界地图

    近几年来,随着负笈海外特别是美国的政治学博士陆续学成回国,R逐渐在高校从事政治学量化研究的师生群体中流行起来,形成了与Stata并驾齐驱的局面.与需要付费购买才能使用的商业统计软件Stata不同,R可 ...

  • ggplot2绘图学习 径向柱形图

    径向柱形图也被称为圆形柱形图或星图.这种图表使用同心圆网格来绘制条形图 每个圆圈表示一个数值刻度,而径向分隔线(从中心延伸出来的线)则用作区分不同类别或间隔(如果是直方图).刻度上较低的数值通常由中心 ...

  • EasyStat新功能添加-堆叠柱状图展示差异-显著性字母标记

    写在前面 这种堆叠柱状图的方式展示对于我们微生物组数据十分重要,所以我加入了这种方式,但是我们知道目前大部分的堆叠柱状图展示物种丰度都是不添加显著性标记的,这里我们更进一步,给他添加上显著性标记,使用 ...

  • 你需要堆叠柱状图添加bar吗?

    年底了,各种事情都在排队去做,造成的后果就是时间像流水一下迅速过去了,抽出一点时间做点学习成了奢求,前两天在微生信生物群0中讨论了一个如何对堆叠柱状图添加误差线问题,类似下面的图片:额.画质真烂!我使 ...

  • 微生物门类堆叠柱状图-冲击图-在R4.0更新版本

    写在前面2020年12月 在R4.0 更新后,我之前的barMainplot函数中冲击图部分不能很好地运行,是由于dplyr版本更新后产生的问题,我将这部分做了更新,并且将颜色等映射去除,方便大家在出 ...

  • 堆叠柱状图也要做统计-标记显著性

    写在前面 有时候我们展示的指标有一定的关系,希望可以使用堆叠柱状图展示.许多朋友们问询,这样如何添加显著性标记,因此本期结合EasyStat包给大家做一个演示. R 包导入 ## 导入包 librar ...

  • 关于微生物门类堆叠柱状图,你知道的并不够

    写在前面 无论是堆叠柱状图,还是近年来会扩展的冲击图.基本都只能对门水平物种多样性进行可视化.然而即使是门水平,也不一定是全部的样本都适合使用堆叠柱状图可视化. 尤其是土壤等复杂的微生物群落的环境,往 ...

  • 微生信生物新年放大招:一条代码完成堆叠柱状图-冲击图的操作-终结版

    00. 写在前面 眼下2019年的余额不足一天了,2020年最终还是要到来,首先祝愿大家元旦快乐,其次新的一年祝大家心想事成.说实在的最近老是想出去玩,哈哈哈,文章还没写完,不可以!不可以! 这只是大 ...

  • 环状堆叠柱状图展示物种丰度信息-基于大量测序样本

    写在前面 堆叠柱状图做成环状,得益于Y叔的ggtreextra,因为我不仅仅要做成环状,还要添加聚类模块.所以就不太好办了.这种展示在样本很少的情况下其实不是很好,但是当样本很多的时候,尤其是上百哥, ...

  • excel带标记的拆线图视频:填充修改数据标记点添加图表数据标签

    excel带标记的拆线图视频|excel修改数据标记点视频|Excel填充数据标记点视频|Excel图表数据标签视频 本视频教程由部落窝教育分享.

  • 如何批量添加微信好友标签?

    但是朋友圈的内容不能乱发:有些内容只给朋友看.有的内容只让同事看...... 所以,最好的方式就是给微信好友分组.虽然微信不能像QQ那样直观的在好友界面添加分组,但是微信也有一个隐藏的好友分组功能-- ...