转录组和蛋白组如何关联分析?先从绘制九象限图开始

news2024/11/27 10:34:37

转录组和蛋白组如何关联分析?先从绘制九象限图开始

五种常用蛋白质组学定量分析方法对比 - 知乎 (zhihu.com)

九象限图在多组学关联分析中非常重要,例如我们可以用九象限图展示“转录组+蛋白组”、“转录组+翻译组”等关联分析中不同基因的差异表达情况。通过分析两种组学数据的相关性,我们可进一步缩小候选基因的范围。

当然,之前的微信文章《Graphpad Prism能不能画九象限图?》中介绍过九象限图的画法,下面再为大家介绍一种效果更好看的画法。

1. 数据合并

#读入两个差异分析表(分别是转录组和翻译组)并合并;
#设置工作目录;
setwd("C:/Users/86136/Desktop/九象限图的绘制")
#查看工作目录中的文件;
dir()
#[1] "protein_exp.csv" "RNA_exp.csv"
#读入数据;
RNA =read.csv("RNA_exp3.csv",header=T)
protein=read.csv("protein_exp3.csv",header=T)

#查看数据的维度;
dim(RNA)
#[1] 10565 5
#查看前6行;
head(RNA)
dim(protein)
#[1] 7028 5
#查看前6行;
head(protein)

#合并两个表格。选择表头为"id"的列进行合并(取交集);
#suffixes:如果两个表列名相同,则会在列名后加入suffixes(后缀)参数中对应的后缀;
#all.x=FALSE,all.y=FALSE,表示输出的是x,y表格的交集;
combine= merge(RNA,protein,
by.x="id",
by.y="id",
suffixes = c("_RNA","_Protein") ,
all.x=FALSE,
all.y=FALSE)
#查看合并后表格的维度;
dim(combine)
#[1] 6657 9
#保存合并后的数据;
write.csv(combine,"RNA_protein3.csv",row.names=FALSE)

2. 数据筛选

#载入相关的R包;
library(dplyr)
library(ggplot2)
library(ggrepel)

#提取用于作图的列组成新数据框;
data <- data.frame(combine[c(1,3,4,6,7,8)])
#查看前6行;
head(data)

#对数据进行分组;
#生成显著上下调数据标签;
data$part <- case_when(abs(data$log2FC_RNA) >= 1 & abs(data$log2FC_Protein) >= 1 ~ "part1379",
abs(data$log2FC_RNA) < 1 & abs(data$log2FC_Protein) > 1 ~ "part28",
abs(data$log2FC_RNA) > 1 & abs(data$log2FC_Protein) < 1 ~ "part46",
abs(data$log2FC_RNA) < 1 & abs(data$log2FC_Protein) < 1 ~ "part5")
head(data)

3. 绘制表格

#开始尝试绘图;
p0 <-ggplot(data,aes(log2FC_RNA,log2FC_Protein,color=part))
#添加散点;
p1 <- p0+geom_point(size=1.2)+guides(color="none")
p1

#自定义半透明颜色;
mycolor <- c("#FF9999","#99CC00","#c77cff","gray80")
p2 <- p1 + scale_colour_manual(name="",values=alpha(mycolor,0.7))
p2

#添加辅助线;
p3 <- p2+geom_hline(yintercept = c(-1,1),
size = 0.5,
color = "grey40",
lty = "dashed")+
geom_vline(xintercept = c(-1,1),
size = 0.5,
color = "grey40",
lty = "dashed")
p3

#调整横轴和纵轴绘图区域的范围;
#设置y轴范围(上下两端的空白区域设为1),修改刻度标签;
#expansion函数设置坐标轴范围两端空白区域的大小;mult为“倍数”模式,add为“加性”模式;
p4<-p3+
scale_y_continuous(expand=expansion(add = c(0.5, 0.5)),
limits = c(-7, 7),
breaks = c(-6,-3,0,3,6),
label = c("-6","-3","0","3","6"))+
scale_x_continuous(expand=expansion(add = c(0.5, 0.5)),
limits = c(-7, 7),
breaks = c(-6,-3,0,3,6),
label = c("-6","-3","0","3","6"))
p4
#自定义图表主题,对图表做精细调整;
top.mar=0.2
right.mar=0.2
bottom.mar=0.2
left.mar=0.2
#隐藏纵轴,并对字体样式、坐标轴的粗细、颜色、刻度长度进行限定;
mytheme<-theme_bw()+
theme(text=element_text(family = "sans",colour ="gray30",size = 12),
panel.grid = element_blank(),
panel.border = element_rect(size = 0.8,colour = "gray30"),
axis.line = element_blank(),
axis.ticks = element_line(size = 0.6,colour = "gray30"),
axis.ticks.length = unit(1.5,units = "mm"),
plot.margin=unit(x=c(top.mar,right.mar,bottom.mar,left.mar),
units="inches"))
#应用自定义主题;
p5 <- p4+mytheme
p5

#如果考虑差异的显著性,则需要进一步分组;
#生成至少在一个组学显著上下调的数据标签;
data$sig <- case_when(data$Pvalue_RNA < 0.05 & data$Pvalue_Protein <0.05 ~ "sig",
data$Pvalue_RNA >= 0.05 | data$Pvalue_Protein >=0.05 ~ "no")
head(data)

#将作图数据表格拆分成显著和不显著两部分;
sig <- filter(data,sig == "sig")
non <- filter(data,sig == "no")

#重新进行绘图;
p6 <-ggplot(data,aes(log2FC_RNA,log2FC_Protein))+
geom_point(data=non,aes(log2FC_RNA,log2FC_Protein),size=1.2,color="gray90")+
geom_point(data=sig,aes(log2FC_RNA,log2FC_Protein,color=part),size=1.5)+
guides(color="none")
p6

#自定义半透明颜色;
mycolor <- c("#99CC00","#FF9999","#c77cff","gray90")
p7 <- p6 + scale_colour_manual(name="",values=alpha(mycolor,0.7))+mytheme
p7

#添加辅助线并修改坐标轴范围;
p8 <- p7+geom_hline(yintercept = c(-1,1),
size = 0.5,
color = "gray40",
lty = "dashed")+
geom_vline(xintercept = c(-1,1),
size = 0.5,
color = "gray40",
lty = "dashed")+
scale_y_continuous(expand=expansion(add = c(0.5, 0.5)),
limits = c(-7, 7),
breaks = c(-6,-3,0,3,6),
label = c("-6","-3","0","3","6"))+
scale_x_continuous(expand=expansion(add = c(0.5, 0.5)),
limits = c(-7, 7),
breaks = c(-6,-3,0,3,6),
label = c("-6","-3","0","3","6"))
p8

#计算两个组学差异倍数的相关性,并取2位小数;
cor = round(cor(data$log2FC_RNA,data$log2FC_Protein),2)
#准备作为图形的标题;
lab = paste("correlation=",cor,sep="")
lab
#[1] "correlation=0.35"
#在图上添加文字标签;
p8+geom_text(x = -5.2, y = 6.4, label = lab, color="gray40")

好啦,今天先分享到这里啦~

想要第一时间获取科研绘图干货,欢迎关注基迪奥生物旗下的官方工作号:SCIPainter

专注分享科研绘图技能与工具!

 

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

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

相关文章

DotNet VOL.Core框架学习使用笔记(二)(持续更新)

2023-7-5 生成代码的列表界面&#xff0c;在数据行里增加一个操作列 查看按钮&#xff0c;打开编辑框&#xff0c;然后让编辑框成为一个只读的查看界面。 页面对应的js文件中增加如下 this.columns.push 函数内容。 按钮的点击事件 重点代码 this.edit(row); 这就是框架里编…

构建工具——webpack、vite

文章目录 构建工具Webpack使用步骤配置文件&#xff08;webpack.config.js&#xff09;插件&#xff08;plugin&#xff09; ViteVite 也是前端的构建工具使用命令构建配置文件&#xff1a;vite.config.js 构建工具 当我们习惯了在 node 中编写代码的方式后&#xff0c;在回到…

page-break-after: always打印时强制分页

page-break-before 元素在指定元素前添加分页符。 <div stylepage-break-after: always;></div> <p stylepage-break-after: always;></p>https://www.runoob.com/cssref/pr-print-pagebb.html

小样本图像目标检测研究综述——张振伟论文阅读

小样本图像目标检测研究综述——张振伟&#xff08;计算机工程与应用 2022&#xff09; 论文阅读 目前&#xff0c;小样本图像目标检测方法多基于经典的俩阶段目标检测算法Faster R-CNN作为主干网络&#xff0c;当然也有将YOLO&#xff0c;SSD一阶段目标检测算法作为主干网络的…

Android Studio实现内容丰富的安卓公交线路查询平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号084 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 开发语言&#xff1a;java 2.功能介绍 安卓端&#xff1a; …

zabbix基础3——邮箱告警

文章目录 一、环境说明二、第三方邮箱告警2.1 开启第三方邮箱SMTP服务2.2 配置用户媒介2.3 定义媒介类型2.4 配置告警方式和动作2.5 触发告警&#xff0c;测试效果 三、本地邮箱脚本3.1 服务端设置脚本3.2 设置用户媒介3.3 定义媒介类型3.4 配置告警方式动作3.4 触发告警&#…

Leetcode-每日一题【92.反转链表Ⅱ】

题目 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5], left 2, right 4输出&#xff1a;…

算法中的递推算法

递推算法 给定一个数的序列H0,H1,…,Hn,…若存在整数n0&#xff0c;使当n>n0时,可以用等号(或大于号、小于号)将Hn与其前面的某些项Hi(0<i<n)联系起来&#xff0c;这样的式子就叫做递推关系。 递推算法是一种简单的算法&#xff0c;即通过已知条件&#xff0c;利用特…

免费 Selenium各大浏览器驱动【谷歌chrme、火狐Firefox、IE浏览器】

aardio群 625494397 废话不多说 直接开整&#xff01; 竟然还有脸收费 服了 下载对应版本的浏览器驱动 目标网址 应用场景 Selenium库涉及到 安装selenium库 pip install selenium-i https://mirrors.aliyun.com/pypi/simple/下载对应浏览器驱动 https://registry.npmmirror.c…

The 14th Jilin Provincial Collegiate Programming Contest(暑期训练)

Attachments - The 14th Jilin Provincial Collegiate Programming Contest - Codeforces 目录 Problem A. Chord Problem B. Problem Select Problem C. String Game Problem E. Shorten the Array Problem F. Queue Problem G. Matrix Problem J. Situation Problem L. …

ESP32设备驱动-HTU31温湿度传感器驱动

HTU31温湿度传感器驱动 文章目录 HTU31温湿度传感器驱动1、HTU31介绍2、硬件准备3、软件准备4、驱动实现1、HTU31介绍 高性能 HTU31 湿度和温度组合传感器是市场上最小和最精确的湿度传感器之一。 HTU31 提供数字和模拟版本,即使在最恶劣的环境中也能提供快速响应时间、精确测…

阿里云美国服务器怎么样?

随着业务量的扩展&#xff0c;很多小伙伴的业务发展到了海外&#xff0c;那么阿里云服务器给大家提供了方便&#xff0c;那么今天我们来说一下阿里云美国服务器好不好用&#xff0c;首先阿里云在美国有两个地域供大家选择&#xff1a;美国西部1&#xff08;硅谷&#xff09;和美…

直播美颜工具和美颜SDK:从用户需求到技术实现的完整流程

随着直播行业的迅速发展&#xff0c;用户对于直播内容的质量和视觉享受有着越来越高的要求。直播美颜工具和美颜SDK作为一种技术解决方案&#xff0c;在实时视频中提供了美化和优化的功能&#xff0c;满足了用户的需求。本文将介绍直播美颜工具和美颜SDK的完整流程&#xff0c;…

STM32——GPIO配置

文章目录 一、GPIO八种模式1. 输入2. 输出3. 如何选择GPIO的模式 二、库函数GPIO配置1. 配置代码2.参数设置 一、GPIO八种模式 GPIO的输入输出是对于STM32单片机来说的。以下仅为个人粗略笔记&#xff0c;内部电路分析可参考博客https://blog.csdn.net/k666499436/article/det…

Impala3.4源码阅读笔记(二)data-cache的Lookup实现

前言 本文为笔者个人阅读Apache Impala源码时的笔记&#xff0c;仅代表我个人对代码的理解&#xff0c;个人水平有限&#xff0c;文章可能存在理解错误、遗漏或者过时之处。如果有任何错误或者有更好的见解&#xff0c;欢迎指正。 正文 本文介绍Lookup的具体流程和细节&…

基于matlab使用深度学习进行图像类别分类(附源码)

一、前言 此示例演示如何使用预训练卷积神经网络 &#xff08;CNN&#xff09; 作为特征提取器来训练图像类别分类器。 卷积神经网络 &#xff08;CNN&#xff09; 是深度学习领域的一种强大的机器学习技术。CNN使用大量不同图像进行训练。从这些大型集合中&#xff0c;CNN可…

【软考系统架构师】数据库三大模式:外模式、概念模式和内模式

目录 1 数据库的三种模式 1.1 内模式 1.2 概念模式 1.3 外模式 2 为什么要设置这些模式 2.1 物理层 2.2 概念层 2.3 用户层 1 数据库的三种模式 1.1 内模式 也称存储模式&#xff08;Storage Schema&#xff09;&#xff0c;内模式是整个数据库的最低层表示&#xff…

【macOS 系列】mac设置截屏或其他操作的默认保存位置

1、第一步、在用户/图片文件夹下&#xff0c;新建“截图”文件夹 2、第二步、打开终端&#xff0c;输入defaults write com.apple.screencapture location ~/Pictures/截图/后回车 3、第三步、操作完成后&#xff0c;再次输入killall SystemUIServer后回车 如果你在web前端开发…

对输入图像按比例压缩、居中填充

摘要&#xff1a; 图像在输入神经网络之前&#xff0c;通常需要进行尺寸压缩&#xff0c;如yolov5的输入为640x640&#xff0c;分类网络Resnet-50的输入为224x224。通常地&#xff0c;分类网络直接将输入进行resize处理&#xff0c;而对于目标检测网络&#xff0c;为了防止目标…

js封装公用from表单验证工具验证长度邮件电话身份证非空

效果 function validateRequiredFields(formId) {var form document.getElementById(formId);var elements form.elements;var valid true;for (var i 0; i < elements.length; i) {var element elements[i];if (element.hasAttribute("req")) {var value e…