跟着Nature Communications学作图:R语言ggplot2柱形图展示GO富集分析的结果

简介: 跟着Nature Communications学作图:R语言ggplot2柱形图展示GO富集分析的结果

论文

Chromosome-level assemblies of multiple Arabidopsis genomes reveal hotspots of rearrangements with altered evolutionary dynamics

https://www.nature.com/articles/s41467-020-14779-y

拟南芥NC_panGenome.pdf

分析代码的github主页

https://github.com/schneebergerlab/AMPRIL-genomes

论文中组装了7个拟南芥的基因组,做了一些泛基因组相关的分析,数据和大部分代码都公开了,我们试着复现一下其中的图和一些分析过程,今天的推文复现一下论文中的figure5e 柱形图展示富集分析的结果

做完GO富集分析,数据格式如下

image.png

数据是excel存储

首先是读取数据

library(readxl)
dat<-read_excel("data/20230318/Source_Data.Figure5/5e/Fig5e.HOT.genes.GO.xlsx")
dat

最基本的柱形图

library(ggplot2)
ggplot(dat,aes(x=Term,y=Count))+
  geom_col()

image.png

进行一些美化

library(tidyverse)

dat %>% 
  mutate(Term=str_replace(Term,"GO:[0-9]+~","")) %>% 
  arrange(desc(Count)) %>% 
  mutate(Term=factor(Term,levels = Term)) %>% 
  ggplot(aes(x=Term,y=Count))+
  geom_col(aes(fill=PValue))+
  theme_bw()+
  theme(axis.text.x = element_text(angle = 60,hjust=1),
        legend.position = c(0.9,0.4))+
  scale_y_continuous(expand = expansion(mult = c(0,0)),
                     limits = c(0,65))+
  scale_fill_gradient(low="blue",high = "red",
                      name=expression(italic("P-value")))+
  labs(x=NULL)

image.png

买一送一,再复现一下论文中的Figure5d

fig5d<-read_delim("data/20230318/Source_Data.Figure5/5d/Fig5d.txt",
                  delim = "\t")
library(ggh4x)

fig5d %>% 
  mutate(region=factor(region,levels = c("SYN","HOR"))) -> fig5d
ggplot(data=fig5d,aes(x=`high-effect-variant-percent`,y=region))+
  geom_boxplot(outlier.alpha = 0,
               aes(fill=region),
               width=0.4)+
  theme_bw()+
  theme(legend.position = "none",
        panel.border = element_blank(),
        axis.line = element_line(),
        panel.grid = element_blank())+
  scale_x_continuous(limits = c(0,15))+
  guides(x=guide_axis_truncated(trunc_lower = 0,
                                trunc_upper = 15),
         y=guide_axis_truncated(trunc_lower = 1,
                                trunc_upper = 2))+
  scale_fill_manual(values = c("#2b6aa8","#f39200"))+
  labs(x="Deleterious variants (%)",y=NULL)

image.png

最后是拼图

library(patchwork)
p2+p1+
  plot_layout(widths = c(1,3))

image.png

示例数据和代码可以给推文点赞,然后点击在看,最后留言获取

欢迎大家关注我的公众号

小明的数据分析笔记本

小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!

微信公众号好像又有改动,如果没有将这个公众号设为星标的话,会经常错过公众号的推文,个人建议将 小明的数据分析笔记本 公众号添加星标,添加方法是

点开公众号的页面,右上角有三个点

image.png

点击三个点,会跳出界面

image.png

直接点击 设为星标 就可以了

相关文章
|
11天前
|
人工智能 数据可视化 编译器
Go interface实现分析
本文深入探讨了Go语言中接口的定义、实现及性能影响。接口作为一种“约定”,包含方法签名集合,无需依赖具体类型即可调用方法,隐藏了内部实现细节。文章分析了接口的两种实现方式(iface和eface)、按值与按指针实现的区别,以及nil接口与普通nil的区别。同时,通过反汇编代码对比了接口动态调用与类型直接调用的性能差异,指出接口调用存在内存逃逸和无法内联的问题。最后总结了接口的优势与局限性,强调在实际开发中需根据场景合理选择是否使用接口。
46 13
|
1月前
|
存储 监控 算法
员工行为监控软件中的 Go 语言哈希表算法:理论、实现与分析
当代企业管理体系中,员工行为监控软件已逐步成为维护企业信息安全、提升工作效能的关键工具。这类软件能够实时记录员工操作行为,为企业管理者提供数据驱动的决策依据。其核心支撑技术在于数据结构与算法的精妙运用。本文聚焦于 Go 语言中的哈希表算法,深入探究其在员工行为监控软件中的应用逻辑与实现机制。
61 14
|
2月前
|
Java 编译器 Go
go的内存逃逸分析
内存逃逸分析是Go编译器在编译期间根据变量的类型和作用域,确定变量分配在堆上还是栈上的过程。如果变量需要分配在堆上,则称作内存逃逸。Go语言有自动内存管理(GC),开发者无需手动释放内存,但编译器需准确分配内存以优化性能。常见的内存逃逸场景包括返回局部变量的指针、使用`interface{}`动态类型、栈空间不足和闭包等。内存逃逸会影响性能,因为操作堆比栈慢,且增加GC压力。合理使用内存逃逸分析工具(如`-gcflags=-m`)有助于编写高效代码。
|
3月前
|
存储 缓存 监控
企业监控软件中 Go 语言哈希表算法的应用研究与分析
在数字化时代,企业监控软件对企业的稳定运营至关重要。哈希表(散列表)作为高效的数据结构,广泛应用于企业监控中,如设备状态管理、数据分类和缓存机制。Go 语言中的 map 实现了哈希表,能快速处理海量监控数据,确保实时准确反映设备状态,提升系统性能,助力企业实现智能化管理。
53 3
|
6月前
|
Go API 数据库
Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
本文介绍了 Go 语言中常用的 ORM 框架,如 GORM、XORM 和 BeeORM,分析了它们的特点、优势及不足,并从功能特性、性能表现、易用性和社区活跃度等方面进行了比较,旨在帮助开发者根据项目需求选择合适的 ORM 框架。
555 4
|
6月前
|
中间件 Go API
Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架
本文概述了Go语言中几种流行的Web框架,如Beego、Gin和Echo,分析了它们的特点、性能及适用场景,并讨论了如何根据项目需求、性能要求、团队经验和社区支持等因素选择最合适的框架。
531 1
|
6月前
|
安全 Go 开发者
代码之美:Go语言并发编程的优雅实现与案例分析
【10月更文挑战第28天】Go语言自2009年发布以来,凭借简洁的语法、高效的性能和原生的并发支持,赢得了众多开发者的青睐。本文通过两个案例,分别展示了如何使用goroutine和channel实现并发下载网页和构建并发Web服务器,深入探讨了Go语言并发编程的优雅实现。
107 2
|
7月前
|
算法 Java 编译器
你为什么不应该过度关注go语言的逃逸分析
【10月更文挑战第21天】逃逸分析是 Go 语言编译器的一项功能,用于确定变量的内存分配位置。变量在栈上分配时,函数返回后内存自动回收;在堆上分配时,则需垃圾回收管理。编译器会根据变量的使用情况自动进行逃逸分析。然而,过度关注逃逸分析可能导致开发效率降低、代码复杂度增加,并且对性能的影响相对较小。编译器优化通常比人工干预更准确,因此开发者应更多关注业务逻辑和整体性能优化。
|
7月前
|
算法 安全 Go
Python与Go语言中的哈希算法实现及对比分析
Python与Go语言中的哈希算法实现及对比分析
112 0
|
7月前
|
机器学习/深度学习 自然语言处理 Go
Python与Go在AIGC领域的应用:比较与分析
Python与Go在AIGC领域的应用:比较与分析
150 0