双侧条形图绘制教程

写在前面

双侧条形图在我们的文章中也是比较常见的,那么这样的图形是如何绘制的呢? 以及它使用的数据类型是什么呢? 这些都是我们在绘制图形前需要掌握的,至少我们知道绘图的数据集如何准备,这样才踏出第一步

今天的教程,我们会从数据的准备,以及数据如何整理,以及结合自己的绘图过程中遇到问题是如何解决来进行讲解。PS:仅代表个人的观点,以及自己遇到此问题时自己的方法来进行说明。也许,这个并不会死唯一且最好的方法,大家在绘图中请结合自己的能力和方法。

本期教程

双侧条形图

获得本期教程代码口令:20240205

原文链接:R语言绘图教程 | 双侧条形图绘制教程

什么时间及什么数据使用双侧条形图?一般使用此图形,基本是富集图

一般使用此图形,基本是富集图。如GO、KEGG、GSEA、GSVE等等,我们用来表示各个通路在研究中的显著性、得分情况等。

绘图

教程一

这里我们使用已经整理好的数据进行绘图,我们使用Execl进行整理数据。数据结果来源,GO、KEGG、GSEA、GSVE等富集结果。

1. 导入所需的R包

##'@导入所需的R包
library(limma)
library(ggplot2)
library(ggpubr)
library(tidyr)
library(tidyverse)
library(ComplexHeatmap)

2. 导入数据

在这里我们发现,我们有很多个富集通路,但是我们绘图的时候需要这么多吗?应该只需要各别几个。在这里我们可以手动调整,或是通过P值进行筛选。

dt1 <- read.csv("DE_KEGG.input.csv",header = T, row.names = 1)
###'@导入txt文件
#dt1 <- read.table("Input_KEGG.txt",header = T, row.names = 1, sep = '\t',check.names = F)
> dt1[1:5,1:5]logFC     AveExpr         t     P.Value   adj.P.Val
KEGG_TGF_BETA_SIGNALING_PATHWAY -0.1723618 0.020400811 -5.029813 0.000001250 0.000190767
KEGG_COLORECTAL_CANCER          -0.1443645 0.007857589 -3.773441 0.000222656 0.010260593
KEGG_MELANOMA                   -0.1129672 0.041504860 -3.736434 0.000255165 0.010260593
KEGG_ADHERENS_JUNCTION          -0.1541395 0.027103539 -3.721243 0.000269769 0.010260593
KEGG_PATHWAYS_IN_CANCER         -0.1100711 0.017776668 -3.615438 0.000395646 0.010260593

3. 筛选数据

筛选出的作图的数据,这里我们的直接使用DescriptionLogPgroup进行绘图

df <- data.frame(Description = rownames(dt1), LogP  = log10(dt1$adj.P.Val), Group  = dt1$group, LogFC = dt1$logFC)

4. 调整Description顺序

###'@调整`Description`顺序
df$Description <- factor(df$Description, levels = rev(df$Description))

若是我们这里有自己整理的Description顺序,可以直接在levels()后面加上自己的排序即可。

绘图

  1. 基础图形
ggplot(df, aes(x = LogFC, y = Description, fill = Group))+geom_col()+theme_bw()

2.更改颜色

ggplot(df, aes(x = LogFC, y = Description, fill = Group))+scale_fill_manual(values = c('palegreen3','dodgerblue4'), guide = FALSE)+geom_col()+theme_bw()

  1. 高阶绘图

此教程来源:https://mp.weixin.qq.com/s/aVy5ubaKc6Q8_wf-R9TVGQ

p1 <- ggplot(df, aes(x = LogFC, y = Description, fill = Group))+scale_fill_manual(values = c('palegreen3','dodgerblue4'), guide = FALSE)+geom_col()+theme_bw()+##'@自定义主题theme(legend.position = 'none',axis.text.y = element_blank(),axis.ticks.y = element_blank(),panel.grid.major = element_blank(),panel.grid.minor = element_blank(),panel.border = element_blank(),axis.line.x = element_line(color = 'grey60',size = 1.1),axis.text = element_text(size = 12))

添加对应的通路标签


up <- df[which(df$Group == 'Up'),]
down <- df[which(df$Group == 'Down'),]
p1 +##'@添加Up的通路富集geom_text(data = up,aes(x = -0.01, ## 调整通路标签x轴位置y = Description, label = Description),size = 3.5,hjust = 1)+ #标签右对齐##'@添加Down的通路标签geom_text(data = down,aes(x = 0.01, y = Description, label = Description),size = 3.5,hjust = 0)+  #标签左对齐#scale_x_continuous(breaks=seq(-4, 6, 2)) + #x轴刻度修改,若需要请结合自己的数据调整labs(x = 'logFC', y = ' ', title = 'Enriched Pathway') + #修改x/y轴标签、标题添加theme(plot.title = element_text(hjust = 0.5, size = 14))

教程二

若是我们的直接导入通路数据集矩阵,以及我们的未有logFC和P值,我们该如何操作呢

第一步需要操作步骤:进行差异分析。比如,我们输出数据是GSVA的数据集。

  1. 输入数据集
data_df <- read.csv("Input_KEGG.csv",header = T,row.names = 1)
##'@查看数据
data_df[1:5,1:10]
> data_df[1:5,1:10]sample001   sample002   sample003
KEGG_O_GLYCAN_BIOSYNTHESIS                              -0.04304991 -0.24987132 -0.12401679
KEGG_AMINO_SUGAR_AND_NUCLEOTIDE_SUGAR_METABOLISM        -0.24783431 -0.11383994 -0.47895615
KEGG_GLYCOSAMINOGLYCAN_DEGRADATION                       0.26018439  0.01315923 -0.25700397
KEGG_GLYCOSAMINOGLYCAN_BIOSYNTHESIS_CHONDROITIN_SULFATE  0.42760250 -0.06222532  0.00031469
KEGG_GLYCOSAMINOGLYCAN_BIOSYNTHESIS_KERATAN_SULFATE      0.34888990 -0.38251570 -0.26030188sample004   sample005    sample006
KEGG_O_GLYCAN_BIOSYNTHESIS                              -0.11976645  0.40799471 -0.121623478
KEGG_AMINO_SUGAR_AND_NUCLEOTIDE_SUGAR_METABOLISM        -0.52727188  0.31490335 -0.000949728
KEGG_GLYCOSAMINOGLYCAN_DEGRADATION                      -0.03605253  0.29166666  0.001121143
KEGG_GLYCOSAMINOGLYCAN_BIOSYNTHESIS_CHONDROITIN_SULFATE  0.09261353 -0.06208377 -0.159061239
KEGG_GLYCOSAMINOGLYCAN_BIOSYNTHESIS_KERATAN_SULFATE     -0.43428522  0.15120498 -0.455994453sample007    sample008   sample009
  1. 差异分析
    group_list设置中,请根据自己数据进行设置,比如我这里有160个样本,CKTreat各80个。
###'@构建design
group_list <- data.frame(sample = colnames(data_df), group = c(rep("CK", 80), rep("Treat", 80)))
group_list$group <- factor(group_list$group,levels=c("CK",'Treat'))
design <- model.matrix(~ 0 + group_list$group)
colnames(design) <- levels(group_list$group)
rownames(design) <- colnames(data_df)
design
  1. 构建差异比较矩阵
###'@构建差异比较矩阵
contrast.matrix <- makeContrasts(CK-Treat, levels = design)
  1. 差异分析
fit <- lmFit(data_df, design)
fit2 <- contrasts.fit(fit, contrast.matrix)
fit2 <- eBayes(fit2)
  1. 获得差异结果
dt <- topTable(fit2, coef = 1, n = Inf, adjust.method = "BH", sort.by = "P")
dt[1:10,1:5]
> dt[1:10,1:5]logFC     AveExpr         t      P.Value   adj.P.Val
KEGG_TGF_BETA_SIGNALING_PATHWAY      -0.17236176 0.020400811 -5.029813 1.246843e-06 0.000190767
KEGG_COLORECTAL_CANCER               -0.14436446 0.007857589 -3.773441 2.226562e-04 0.010260593
KEGG_MELANOMA                        -0.11296720 0.041504860 -3.736434 2.551651e-04 0.010260593
KEGG_ADHERENS_JUNCTION               -0.15413947 0.027103539 -3.721243 2.697688e-04 0.010260593
KEGG_PATHWAYS_IN_CANCER              -0.11007105 0.017776668 -3.615438 3.956464e-04 0.010260593
KEGG_WNT_SIGNALING_PATHWAY           -0.11940334 0.014475730 -3.610726 4.023762e-04 0.010260593
KEGG_HYPERTROPHIC_CARDIOMYOPATHY_HCM -0.10903295 0.035562175 -3.462058 6.792812e-04 0.014847145
KEGG_GAP_JUNCTION                    -0.10486217 0.006571587 -3.358319 9.693892e-04 0.014898594
KEGG_LONG_TERM_POTENTIATION          -0.09738506 0.003833619 -3.309357 1.143329e-03 0.014898594
KEGG_SPHINGOLIPID_METABOLISM         -0.12157635 0.031751704 -3.306694 1.153577e-03 0.014898594
#把通路的limma分析结果保存到文件
write.table(dt, "all.limma_KEGG.output.txt", quote = F,sep = '\t',row.names = T,col.names = T)
#write.csv(x,"all.limma_KEGG.output.csv")

到这里我们也就可以使用以上的代码进行分析了,你可以使用P值或是LogFC进行绘制,我们论文中一般使用的是P值进行绘制图图形。

在这里,我们使用t值绘制图形。操作如下所示。

  1. 筛选所需数据,使用t值进行过滤,t值的大小根据自己的需求进行调整
df_t <- df_t[df_t$score > 2 | df_t$score < -3.5,]
dim(df_t)
df_t
> df_tDescription     score group
1  KEGG_TGF_BETA_SIGNALING_PATHWAY -5.029813  Down
2           KEGG_COLORECTAL_CANCER -3.773441  Down
3                    KEGG_MELANOMA -3.736434  Down
4           KEGG_ADHERENS_JUNCTION -3.721243  Down
5          KEGG_PATHWAYS_IN_CANCER -3.615438  Down
6       KEGG_WNT_SIGNALING_PATHWAY -3.610726  Down
18     KEGG_OLFACTORY_TRANSDUCTION  3.157596    Up
26         KEGG_PARKINSONS_DISEASE  2.990963    Up
31        KEGG_HUNTINGTONS_DISEASE  2.863284    Up
61         KEGG_ALZHEIMERS_DISEASE  2.182530    Up
64 KEGG_CARDIAC_MUSCLE_CONTRACTION  2.133893    Up
  1. 使用t值进行分组
cutoff <- 2
df_t$group <- case_when(df_t$score > cutoff ~ "Up", df_t$score < cutoff ~ "Down")
df_t[1:9,1:3]
> df_t[1:9,1:3]Description     score group
1  KEGG_TGF_BETA_SIGNALING_PATHWAY -5.029813  Down
2           KEGG_COLORECTAL_CANCER -3.773441  Down
3                    KEGG_MELANOMA -3.736434  Down
4           KEGG_ADHERENS_JUNCTION -3.721243  Down
5          KEGG_PATHWAYS_IN_CANCER -3.615438  Down
6       KEGG_WNT_SIGNALING_PATHWAY -3.610726  Down
18     KEGG_OLFACTORY_TRANSDUCTION  3.157596    Up
26         KEGG_PARKINSONS_DISEASE  2.990963    Up
31        KEGG_HUNTINGTONS_DISEASE  2.863284    Up
  1. 进行排序
df_sort <- df_t[order(df_t$score),]
df_sort$Description <- factor(df_sort$Description, levels = df_sort$Description)
df_sort[1:9,1:3]
  1. 绘图
ggplot(df_sort, aes(Description, score, fill = group)) + geom_bar(stat = 'identity') + coord_flip() + #scale_fill_manual(values = c('palegreen3','dodgerblue4'), guide = FALSE) + #画2条虚线geom_hline(yintercept = c(-cutoff,cutoff), color="white",linetype = 2, #画虚线::1表示实线,2表示虚线,3表示间距更小的虚线size = 0.3)+  #线的粗细geom_text(data = subset(df_sort, score < 0),aes(x=Description, y= 0, label= paste0(" ", Description), color = group),#bar跟坐标轴间留出间隙size = 3, #字的大小hjust = "bottom" ) +  #字的对齐方式geom_text(data = subset(df_sort, score > 0),aes(x=Description, y= -0.1, label=Description, color = group),size = 3, hjust = "inward",angle=360) +  scale_colour_manual(values = c("black","black"), guide = FALSE)+xlab("") +ylab("t value of GSVA score, tumor \n versus non-malignant")+theme_bw() + #去除背景色theme(panel.grid =element_blank()) + #去除网格线theme(panel.border = element_rect(size = 0.6)) + #边框粗细theme(axis.line.y = element_blank(), axis.ticks.y = element_blank(), axis.text.y = element_blank()) #去除y轴

代码和数据链接:

本教程涉及的数据、代码和文件等在社群中可获得!!

若我们的分享对你有用,希望您可以点赞+收藏+转发,这是对小杜最大的支持。

往期文章:

1. 复现SCI文章系列专栏

2. 《生信知识库订阅须知》,同步更新,易于搜索与管理。

3. 最全WGCNA教程(替换数据即可出全部结果与图形)

  • WGCNA分析 | 全流程分析代码 | 代码一

  • WGCNA分析 | 全流程分析代码 | 代码二

  • WGCNA分析 | 全流程代码分享 | 代码三

  • WGCNA分析 | 全流程分析代码 | 代码四

  • WGCNA分析 | 全流程分析代码 | 代码五(最新版本)


4. 精美图形绘制教程

  • 精美图形绘制教程

5. 转录组分析教程

转录组上游分析教程[零基础]

一个转录组上游分析流程 | Hisat2-Stringtie

小杜的生信筆記 ,主要发表或收录生物信息学的教程,以及基于R的分析和可视化(包括数据分析,图形绘制等);分享感兴趣的文献和学习资料!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2776000.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

基于Linux操作系统的Docker容器安装MySQL随笔

1、在Linux上安装Docker容器 cd /etc/yum.repos.d/ curl -O https://download.docker.com/linux/centos/docker-ce.repo sed -i s/$releasever/8/g docker-ce.repo yum install -y docker-ce 2、修改Docker默认镜像仓库&#xff0c;然后启动Docker容器 sudo mkdir -p /etc/do…

Javaweb之SpringBootWeb案例之异常处理功能的详细解析

3. 异常处理 3.1 当前问题 登录功能和登录校验功能我们都实现了&#xff0c;下面我们学习下今天最后一块技术点&#xff1a;异常处理。首先我们先来看一下系统出现异常之后会发生什么现象&#xff0c;再来介绍异常处理的方案。 我们打开浏览器&#xff0c;访问系统中的新增部…

独家完整版!SpringBoot动态定时任务来了!

执行定时任务的线程池配置类 import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.TaskScheduler; import org.springframework.scheduling.concurrent.ThreadPoolTas…

236. 二叉树的最近公共祖先 - 力扣(LeetCode)

题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff08;一个节点也可以…

雨云2h2g香港二区云服务器测评(纯测评)

购买并且重装好系统后&#xff0c;来itdog去ping一下看看延迟怎么样。&#xff08;香港无移动屏蔽&#xff09;&#xff1a; 然后&#xff0c;我们来做一个线路路由测试&#xff08;去回程路由测试&#xff09;。&#xff08;雨云香港服务器IP不是原生IP&#xff0c;而是广播IP…

【Spring】Spring 对 Ioc 的实现

一、Ioc 控制反转 控制反转是一种思想 控制反转是为了降低程序耦合度&#xff0c;提高程序扩展力&#xff0c;达到 OCP 原则&#xff0c;达到 DIP 原则 控制反转&#xff0c;反转的是什么&#xff1f; 将对象的创建权利交出去&#xff0c;交给第三方容器负责 将对象和对象之…

会声会影绿幕抠图操作方法 会声会影绿幕抠图有绿色残边 绿幕抠图视频有绿边怎么处理 抖音怎么剪辑视频 视频剪辑软件推荐

科幻片里真的存在怪兽吗&#xff1f;外太空的画面是直接将演员放入太空拍摄的吗?其实这些不切实际的画面是通过绿幕拍摄实现的。你只需要在绿幕前拍一段太空漫步的视频&#xff0c;再利用会声会影的抠图功能就能实现&#xff01;如果你还不会绿幕抠图&#xff0c;我今天就手把…

Vue.js2+Cesium1.103.0 十五、绘制视锥,并可实时调整视锥姿态

Vue.js2Cesium1.103.0 十五、绘制视锥&#xff0c;并可实时调整视锥姿态 Demo <template><divid"cesium-container"style"width: 100%; height: 100%;"/> </template><script> /* eslint-disable no-undef */ /* eslint-disable …

微信小程序的图片色彩分析,窃取网络图片的主色调

1、安装 Mini App Color Thief 包 包括下载包&#xff0c;简单使用都有&#xff0c;之前写了&#xff0c;这里就不写了 网址&#xff1a;微信小程序的图片色彩分析&#xff0c;窃取主色调&#xff0c;调色板-CSDN博客 2、 问题和解决方案 问题&#xff1a;由于我们的窃取图片的…

娅奴服饰:行至云深处,问计新零售

编辑&#xff1a;阿冒 设计&#xff1a;沐由 大浪壮美&#xff0c;时尚前行。 作为广东省首批特色小镇创建示范点&#xff0c;以及粤港澳大湾区唯一的特色时尚小镇&#xff0c;大浪时尚小镇云集了700余家服装及配套企业&#xff0c;涌动着蓬勃的生机与无尽的活力。 国内知名的“…

API网关架构设计与实现的经验总结与实践

API网关是现代微服务架构中的重要组件&#xff0c;它充当了前端和后端微服务之间的中介。本文将介绍API网关的架构设计原则和实现方法&#xff0c;以帮助开发人员更好地理解和应用这些技术。 1. 什么是API网关&#xff1f; - 解释了API网关的基本概念和作用&#xff0c;以及…

API接口访问鉴权设计和实现的经验总结

API接口访问鉴权是保护API资源安全的重要措施。本文总结了一些常见的API接口访问鉴权设计和实现方法&#xff0c;以帮助开发人员更好地理解和应用这些技术。 1. 什么是API接口访问鉴权&#xff1f; - 解释了API接口访问鉴权的基本概念和作用&#xff0c;以及为什么需要对A…

如何轻松恢复已删除/未保存的 Word 文档

经过几个小时的编写和编辑后&#xff0c;您的计算机决定崩溃&#xff0c;或者您不小心删除了您一直在努力处理的同一个文件。听起来像一场噩梦&#xff0c;对吧&#xff1f;不幸的是&#xff0c;任何人都可能遇到这种情况&#xff0c;这就是为什么我们整理了这份经过尝试和测试…

Web后端开发:事务与AOP

事务管理 在学习数据库时&#xff0c;讲到&#xff1a;事务是一组操作的集合&#xff0c;它是一个不可分割的工作单位。事务会把所有的操作作为一个整体&#xff0c;一起向数据库提交或者是撤销操作请求&#xff0c;要么同时成功&#xff0c;要么同时失败。 事务的操作主要有三…

【开源】SpringBoot框架开发校园电商物流云平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 商品数据模块2.3 快递公司模块2.4 物流订单模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 商品表3.2.2 快递公司表3.2.3 物流订单表 四、系统展示五、核心代码5.1 查询商品5.2 查询快递公司5.3 查…

在虚拟机上搭建CentOS环境并配置静态IP

在虚拟机上搭建CentOS环境并配置静态IP 在进行Linux系统的学习和实践时&#xff0c;搭建一个本地的CentOS环境是一个非常好的方式。本文将介绍如何使用虚拟机&#xff08;VM&#xff09;搭建CentOS环境&#xff0c;并配置静态IP&#xff0c;以便更好地进行网络管理和测试。 步…

STM32输出PWM波控制180°舵机

时间记录&#xff1a;2024/2/8 一、PWM介绍 &#xff08;1&#xff09;脉冲宽度调制 &#xff08;2&#xff09;占空比&#xff1a;高电平时间占整个周期时间的比例 &#xff08;3&#xff09;STM32通过定时器实现PWM时具有两种模式 PWM1模式&#xff1a;向上计数模式下&…

Java面向对象 方法的重写

目录 重写重写的规则实例创建Person类创建Student类测试 重载和重写的区别 重写 发生在子类和父类中&#xff0c;当子类对父类提供的方法不满意的时候&#xff0c;要对父类的方法进行重写。 重写的规则 子类的方法名字和父类必须一致&#xff0c;参数列表&#xff08;个数&…

v-if 和v-for的联合规则及示例

第073个 查看专栏目录: VUE ------ element UI 专栏目标 在vue和element UI联合技术栈的操控下&#xff0c;本专栏提供行之有效的源代码示例和信息点介绍&#xff0c;做到灵活运用。 提供vue2的一些基本操作&#xff1a;安装、引用&#xff0c;模板使用&#xff0c;computed&a…

《低功耗方法学》翻译——附录B:UPF命令语法

附录B&#xff1a;UPF命令语法 本章介绍了文本中引用的所选UPF命令的语法。 节选自“统一电源格式&#xff08;UPF&#xff09;标准&#xff0c;1.0版”&#xff0c;经该Accellera许可复制。版权所有&#xff1a;(c)2006-2007。Accellera不声明或代表摘录材料的准确性或内容&…