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

Tao Wen

2019年1月11日

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

基于phylosep对扩增子下游分析

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

有些日子没有更新了,心里面惦记着啥时候推送两篇,今天终于逃课,坐在这里给大家送点干活;

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

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", "Genus","Abundance")
head(zhnagxu2)
## # A tibble: 6 x 3
##   group Genus            Abundance
##
## 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
##               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# 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
##
## 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 "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
## 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  
cs = Taxonomies_x $Genus
cs1 = cs#提取真正的因子的数量lengthfactor = length(levels(cs1))#提取每个因子对应的数量cs3 = summary (as.factor(cs1))
cs4 = as.data.frame(cs3)
cs4$id = row.names(cs4)#对因子进行排序df_arrange#对Taxonomies_x 对应的列进行排序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

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

柱状图如何添加数字标签_分类堆叠柱状图顺序排列及其添加合适条块标签相关推荐

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

    堆叠柱状图顺序排列及其添加合适条块标签 这篇文章详细解释了堆叠柱状图各种需求是如何得到的,冲击图是如何对应的,这是一条大家学习代码,而不是仅仅出图的推文. 写在前面:人生嘛,不就是这样,总会有高兴和不 ...

  2. 如何添加二级标题_怎样给Word文档添加目录?

    您好,欢迎来到[爆炒Office],这里有原创的实用办公软件技巧.着手工作实际,解决办公问题. 概述 本文介绍Word中常用的操作--给文档添加上目录.这一操作很常用,也很简单,但是,不同的操作得到的 ...

  3. dmp标签_从零搭建一套DMP用户画像标签系统-业务逻辑

    DMP(Data Management Platform)数据管理平台,是把分散的多方数据进行整合纳入统一的技术平台,并对这些数据进行标准化和细分,让用户可以把这些细分结果推向现有的互动营销环境里的平 ...

  4. 【多标签文本分类】融合CNN-SAM与GAT的多标签文本分类模型

    ·阅读摘要:   在本文中,作者基于CNN.Attention.GAT提出CS-GAT模型,在一些通用数据集上,表现良好. ·参考文献:   [1] 融合CNN-SAM与GAT的多标签文本分类模型   ...

  5. centos 添加路由命令_详解CentOS 6.4 添加永久静态路由所有方法汇总

    CentOS添加永久静态路由,具体如下: 在使用双网卡,同时使用2个网关的时候就需要加一条静态路由了.当然还有很多时候会需要加路由. 操作系统版本centos-6.4 64bit 一:使用route ...

  6. java 在面板中加入标签_创建一个JTabbedPane面板,为每一个标签设置一个名称

    [java]代码库package three; //这段程序主要是创建一个JTabbedPane面板,为每一个标签设置一个名称 import javax.swing.*; import java.aw ...

  7. jsf用于页面判断的标签_用于操作和导航的JSF命令组件标签

    jsf用于页面判断的标签 JSF provides two command component tags for performing action and navigation. They are ...

  8. rails 添加外键_如何在Rails后端中添加功能强大的搜索引擎

    rails 添加外键 by Domenico Angilletta 通过多梅尼科·安吉列塔(Domenico Angilletta) In my experience as a Ruby on Rai ...

  9. java pdf添加透明水印_如何在PDF文件中添加透明水印

    原标题:如何在PDF文件中添加透明水印 有些文件添加水印,但是又不想水印影响文件的使用有时候会设置透明水印,那么PDF怎么设置透明水印呢,应该有很多的小伙伴们都很好奇应该怎么做吧,接下来就为大家分享一 ...

  10. java自定义jsp标签_深入浅出javaWeb实战第17讲自定义JSP标签(上)

    <JavaWeb开发>课程计划表 Web的概念及其演变 课程内容: ? Web的概念.特点 ? HTTP协议简介 ? Web技术的发展:静态文档,Web应用,Web服务 JavaWeb应用 ...

最新文章

  1. 到底什么是hash?它起什么作用?
  2. A Router may have only one child element
  3. Web Application:Exploded和Web Application:Archive
  4. Lowest Common Ancestor of a Binary Search Tree a Binary Tree
  5. js分页--存储数据并进行分页
  6. Jboss未授权访问漏洞记录(影响版本:全版本,端口:80,8080)
  7. 快速锁屏电脑快捷键_MacBook Pro使用技能 一键锁屏
  8. 一个tile布局的下拉框
  9. 任务计划中的结果代码
  10. Swagger2+Apizza接口文档
  11. html基础入门----简单动画
  12. 阅读YYKit之YYImage实现gif展示
  13. 六行shell脚本实现Android手机自动刷抖音极速版
  14. 密码显示隐藏符号格式会变
  15. hazy的leetcode刷题笔记(四)
  16. VUE解决路由里的参数改变页面却没有跳转的问题
  17. SAP 各种适配器配器
  18. 一般人我不告诉的bug
  19. 立创开源|USB示波器+信号发生器+USB存储 三合一
  20. 基于SSM框架的图片分享及评价网站设计与实现 毕业设计-附源码201524

热门文章

  1. Git - 命令行 - 使用 Tag 标记你的代码
  2. 10g添加用户 oracle_linux安装oracle
  3. python登陆qq邮箱_python+selenium自动化测试——QQ邮箱自动登录写信
  4. wince植入胎压监测_wince设备通过USB连接线上网指南(原创)(测试成功)
  5. WPF 邮箱输入框提示 和 手机号码验证 .
  6. JS任务栏滚动效果问题
  7. 微信公众平台开发(五) 天气预报功能开发
  8. ajax ----进度条的原理
  9. Nokia 920板砖自救(理论上通用,升级Win10成板砖也可以用这个恢复)
  10. java8之StringJoiner。终于有像guava类库里的功能了