零基础入门转录组数据分析——绘制差异火山图
零基础入门转录组数据分析——绘制差异火山图
差异分析的火山图(Volcano Plot)在生物信息学数据分析中,特别是在基因表达差异分析中,是一个非常直观和有用的工具。
本教程将从导入的数据结构开始,一步步带大家在R中绘制好看的火山图,最后对火山图进行解读,确保读者理解代码的同时学会解读火山图里的每个元素所代表的意思。
首先来看一下最终的火山图长啥样:

火山图的构建基于两个主要的度量指标:
基因表达对数2倍变化(Log2FoldChange):这个指标衡量了基因在不同组别之间的表达水平变化。正值表示基因表达上调,负值表示表达下调。
统计显著性(p.value/p.adj):这个指标是基因表达变化的p值,用于评估观察到的效应(如基因表达的变化)是否可能是由于随机误差引起的,通常认为P < 0.05则结果是显著的,并且更小的p.value/p.adj意味着变化更显著。
注:绘制差异火山图需要用到差异分析的结果
差异分析参考之前的教程:生信数据分析——limma差异分析和生信数据分析——DESeq2差异分析
本项目以GSE203346数据集(高通量测序数据)展示火山图绘制过程
实验分组:疾病组(18例),对照组(19例)
R版本:4.2.2
R包:tidyverse,lance,ggplot2,ggrepel
废话不多说,代码如下:
设置工作空间:
rm(list = ls()) # 删除工作空间中所有的对象
setwd('/XX/XX/XX') # 设置工作路径
if(!dir.exists('./01_DEGs')){dir.create('./01_DEGs')
} # 判断该工作路径下是否存在名为01_DEGs的文件夹,如果不存在则创建,如果存在则pass
setwd('./01_DEGs/') # 设置路径到刚才新建的01_DEGs下
加载包:
library(tidyverse)
library(lance)
library(ggplot2)
library(ggrepel)
导入差异分析结果(limma/DESeq2都可以):
DEG <- read.csv('./GSE203346/DEG_all.csv', row.names = 1, check.names = F)
sig_diff <- read.csv('./GSE203346/DEG_sig.csv', row.names = 1, check.names = F)
DEG如下图所示, sig_diff与DEG相似,只不过sig_diff少了那些没有显著差异的基因。

直接通过ggplot2绘制火山图(需要用到的是DEG中的log2FoldChange,pvalue,change这三列)
ggplot(data = DEG, aes(x = log2FoldChange, y = -log10(pvalue), color = change)) +geom_point(size = 1.2, alpha = 0.4, na.rm = T) # 设置点的大小和透明度

修改火山图中散点的颜色(上调基因用红色,下调基因用绿色,不显著基因用灰色表示)
ggplot(data = DEG, aes(x = log2FoldChange, y = -log10(pvalue), color = change)) +geom_point(size = 1.2, alpha = 0.4, na.rm = T)+ # 设置点的大小和透明度scale_color_manual(values = c("seagreen", "darkgray","firebrick3")) # 设置颜色

给火山图横纵坐标加上阈值线:(横坐标是-0.5,0.5,纵坐标是-log10(0.05))
注:这个阈值线可以自己调整,要和差异分析的筛选阈值保持一直
ggplot(data = DEG, aes(x = log2FoldChange, y = -log10(pvalue), color = change)) +geom_point(size = 1.2, alpha = 0.4, na.rm = T)+ # 设置点的大小和透明度scale_color_manual(values = c("seagreen", "darkgray","firebrick3"))+ # 设置颜色geom_vline(xintercept = c(-0.5, 0.5), # 给x坐标轴的-0.5, 0.5处添加竖线lty = 4, # lty参数设置竖线的形式(直线,虚线等)col = "black", # 竖线颜色设置为黑色lwd = 0.4 # 设置线条的宽度) +geom_hline(yintercept = -log10(0.05), # 给y坐标轴添加横线lty = 4, # lty参数设置竖线的形式(直线,虚线等)col = "black", # 竖线颜色设置为黑色lwd = 0.4 # 设置线条的宽度)

给火山图添加主题,并且设置x轴,y轴,标题以及副标题字体,大小和颜色(其中axis.text是坐标轴文本设置,axis.title是坐标轴标题设置,plot.title是标题设置)
问:什么是主题?
答: ggplot2主题是一种系统,它允许对图像中的非数据元素进行精细的调整,而不会影响几何对象和标度等数据元素。主题不能改变图像的感官性质,但可以使图像更具美观,满足整体一致性的要求。
简单说:可以理解成是一个模板,这个模板对网格线、背景色、图片留白以及标题设置等都有统一的设定,可以在主题的基础上进一步修改字体,排版等一切元素
如下面代码中用到的就是theme_bw()这个主题,之后在theme()中修改主题的参数
ggplot(data = DEG, aes(x = log2FoldChange, y = -log10(pvalue), color = change)) +geom_point(size = 1.2, alpha = 0.4, na.rm = T)+ # 设置点的大小和透明度scale_color_manual(values = c("seagreen", "darkgray","firebrick3"))+ # 设置颜色geom_vline(xintercept = c(-0.5, 0.5), # 给x坐标轴的-0.5, 0.5处添加竖线lty = 4, # lty参数设置竖线的形式(直线&#x相关文章:
零基础入门转录组数据分析——绘制差异火山图
零基础入门转录组数据分析——绘制差异火山图 差异分析的火山图(Volcano Plot)在生物信息学数据分析中,特别是在基因表达差异分析中,是一个非常直观和有用的工具。 本教程将从导入的数据结构开始,一步步带大家在R中绘制好看的火山图,最后对火山图进行解读,确保读者理解…...
C++进阶,手把手带你学继承
🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:c大冒险 总有光环在陨落,总有新星在闪烁 【本节目标】 1.继…...
Java自带的线程池及调用、ThreadPoolExecutor类(线程池的7大参数)、任务队列及底层原理
day32 线程池 引入 一个线程完成一项任务所需时间为: 创建线程时间 - Time1线程中执行任务的时间 - Time2销毁线程时间 - Time3 注意:优化在Time1,Time3(创建销毁线程费时间) 为什么需要线程池 线程池技术正是关注如何缩短或调整Time1和Tim…...
ThreadPool-线程池使用及原理
1. 线程池使用方式 示例代码: // 一池N线程 Executors.newFixedThreadPool(int) // 一个任务一个任务执行,一池一线程 Executors.newSingleThreadExecutorO // 线程池根据需求创建线程,可扩容,遇强则强 Executors.newCachedThre…...
高性能服务系列【十一】主题匹配
主题匹配核心算法就是字符串匹配,在字符串匹配基础上,会加入分段匹配需求,类似URL的点分式字符串。这个算法在几个场景中十分普遍。 1、应用层的路由寻址。比如反向代理中,根据请求中的URL,转发到对应的后台服务。 2…...
Vue 2 组件发布到 npm 的常见问题解决
按照 Vue 2 组件打包并发布到 npm 的方法配置项目后,项目在实际开发过程中,随着代码写法的多样性增加而遇到的各种打包问题,本文将予以逐一解决: 本文目录 同时导出多个组件 样式表 import 问题解决 Json 文件 import 问题解决…...
p2p原理
p2p原理 P2P (Peer-to-Peer) 是一种分布式计算和网络架构模型,它允许对等节点之间直接通信和共享资源,而无需通过集中的服务器。P2P 原理的核心概念是平等性(peer equality),即所有节点在网络中都具有相同的功能和能力…...
从供方协议管理到外部供方管理
从GJB 5000A的供方协议管理到GJB 5000B的外部供方管理,军用软件的研制对承接单位有了更高的标准和要求,也对外部供方管理有了更改的要求,让我们看看具体的变化吧! 供方协议管理的目的: 管理供方产品的获取工作。 外部…...
微服务demo(四)nacosfeigngateway
一、gateway使用: 1、集成方法 1.1、pom依赖: 建议:gateway模块的pom不要去继承父工程的pom,父工程的pom依赖太多,极大可能会导致运行报错,新建gateway子工程后,pom父类就采用默认的spring-b…...
2D与动画
2D转换 1.移动 translate 1. 语法 transform: translate(x,y); 或者分开写 transform: translateX(n); transform: translateY(n); 2.重点 定义 2D 转换中的移动,沿着 X 和 Y 轴移动元素 translate最大的优点:不会影响到其他元素的位置 translat…...
Maven:构建现代化软件项目的强大工具
在软件开发的世界中,Maven 是一个备受欢迎的构建工具。它提供了一种标准化、自动化的方式来管理项目的依赖、构建过程和部署。本文将深入探讨 Maven 的各个方面,帮助您更好地理解和使用这一强大的工具。 一、Maven 的简介 Maven 是一个基于项目…...
脏牛提权(靶机复现)
目录 一、脏牛漏洞概述 二、漏洞复现 1.nmap信息收集 1.1.查看当前IP地址 1.2.扫描当前网段,找出目标机器 1.3.快速扫描目标机全端口 三、访问收集到的资产 192.168.40.134:80 192.168.40.134:1898 四、msf攻击 1.查找对应exp 2.选择对应exp并配置相关设置 五、内…...
用html写一个贪吃蛇游戏
<!DOCTYPE html> <html> <head><title>贪吃蛇</title><meta charset"UTF-8"><meta name"keywords" content"贪吃蛇"><meta name"Description" content"这是一个初学者用来学习的小…...
Topaz Gigapixel AI for Mac 图像放大软件
Topaz Gigapixel AI for Mac是一款专为Mac用户设计的智能图像放大软件。它采用了人工智能技术,特别是深度学习算法,以提高图像的分辨率和质量,使得图像在放大后仍能保持清晰的细节。这款软件的特点在于其能够将低分辨率的图片放大至高分辨率&…...
uniapp先显示提示消息再返回上一页
一、描述 在有些业务场景中,需要先弹出提示后,再返回上一页。 二、思路 使用定时器,先弹出提示消息,然后开个定时器俩秒后再执行,返回上一页的操作,并且清除定时器。 三、实现 uni.showToast({title: …...
【爬虫开发】爬虫从0到1全知识md笔记第2篇:requests模块,知识点:【附代码文档】
爬虫开发从0到1全知识教程完整教程(附代码资料)主要内容讲述:爬虫课程概要,爬虫基础爬虫概述,,http协议复习。requests模块,requests模块1. requests模块介绍,2. response响应对象,3. requests模块发送请求,4. request…...
【算法刷题day11】Leetcode: 20. 有效的括号、 1047. 删除字符串中的所有相邻重复项、150. 逆波兰表达式求值
20. 有效的括号 文档链接:[代码随想录] 题目链接:20. 有效的括号 状态:ok 题目: 给定一个只包括 ‘(’,‘)’,‘{’,‘}’,‘[’,‘]’ 的字符串 s ,判断字符…...
推荐算法策略需求-rank model优化
1.pred_oobe (base) [rusxx]$ pwd /home/disk2/data/xx/icode/baidu/oxygen/rus-pipeline/pipeline-migrate/UserBaseActiveStatPipeline/his_session (base) [rusxx]$ sh test.sh 2. user_skill_history_dict_expt2包含userid [workxx]$ vim /home/work/xx/du-rus/du_rus_o…...
hadoop 常用命令
hadoop 常用命令 hadoop fs -mkdir /test hadoop fs -put /opt/frank/tb_test03.txt /test/ hadoop fs -ls /test/ hadoop fs -cat /test/tb_test03.txt hadoop fs -rm /test/tb_test03.txt hadoop dfs 也能使用、但不推荐,执行会提示: DEPRECATED: Us…...
pdf在浏览器上无法正常加载的问题
一、背景 觉得很有意思给大家分享一下。事情是这样的,开发给我反馈说,线上环境接口请求展示pdf异常,此时碰巧我前不久正好在ingress前加了一层nginx,恰逢此时内心五谷杂陈,思路第一时间便放在了改动项。捣鼓了好久无果…...
STM32单片机电机PID控制技术详解
STM32单片机实现电机PID控制技术解析1. 项目概述PID控制算法作为经典控制理论的核心算法,在工业控制领域已有近百年的应用历史。在电机控制场景中,PID算法通过调节PWM占空比实现对电机转速或位置的精确控制。本项目基于STM32单片机平台,实现了…...
突破限制:跨平台VMware macOS虚拟机部署全指南——非苹果硬件的macOS体验方案
突破限制:跨平台VMware macOS虚拟机部署全指南——非苹果硬件的macOS体验方案 【免费下载链接】unlocker VMware macOS utilities 项目地址: https://gitcode.com/gh_mirrors/unl/unlocker Unlocker是一款针对VMware Workstation和Player的开源补丁工具&…...
Ubuntu22.04上ROS1 Noetic安装避坑指南:从编译错误到完美运行
Ubuntu 22.04上ROS1 Noetic终极安装指南:解决C17兼容性与依赖冲突 当Ubuntu 22.04成为主流开发环境时,许多机器人开发者面临一个尴尬局面:官方支持的ROS1 Noetic仅适配到Ubuntu 20.04。但现实项目中,我们常被迫在新系统上运行旧版…...
CentOS7下StarRocks 3.1.13集群部署实战:三节点FE高可用配置详解
CentOS7下StarRocks 3.1.13集群部署实战:三节点FE高可用配置详解 在当今数据驱动的商业环境中,企业级分析型数据库的可靠性和性能至关重要。StarRocks作为新一代MPP分析数据库,凭借其卓越的实时分析能力和高并发查询性能,正逐渐成…...
FlowState Lab 保姆级Docker容器化部署与运维实战
FlowState Lab 保姆级Docker容器化部署与运维实战 1. 前言:为什么选择Docker部署FlowState Lab 如果你正在寻找一种简单高效的方式来部署FlowState Lab模型,Docker容器化无疑是最佳选择。想象一下,你花了一周时间在本地调试好的模型&#x…...
告别Keil,用VSCode+GCC+STM32CubeMX的Makefile在Windows上编译STM32F103(附完整配置流程)
从Keil到VSCode:打造现代化STM32开发环境全指南 在嵌入式开发领域,商业IDE(如Keil MDK)长期占据主导地位,但随着开源工具链的成熟和开发者对效率要求的提升,越来越多的工程师开始寻求更灵活、更现代化的开…...
JY61P陀螺仪串口数据解析实战:从协议到STM32代码实现
1. JY61P陀螺仪模块初探 第一次拿到JY61P这个六轴姿态传感器时,我下意识以为它和常见的MPU6050差不多。但实际用下来发现,这个国产模块在精度和易用性上都有明显优势。最让我惊喜的是它支持串口通信,完美避开了I2C协议那些令人头疼的时序问题…...
特征选择新思路:Laplacian Score与PCA/Lasso对比实验报告
特征选择方法深度对比:Laplacian Score在真实数据集中的突围表现 当面对高维数据时,特征选择就像是在嘈杂的市场中寻找真正有价值的声音。传统的PCA和Lasso方法已经服务了我们多年,但Laplacian Score带来的图论视角正在悄然改变游戏规则。本文…...
在openKylin下安装配置GitLab遇到的问题及解决方案(v0.1.0)
作者:沈传越 明德融创工作室(Minter Fusion Studio, MFS) 出品 本文安装的GitLab-ce 15.10.0版。操作系统openKylin 2.0 SP2。 一、安装GitLab-ce依赖软件时报错 1. 错误描述 在执行sudo apt-get install curl openssh-server ca-certifi…...
Qwen3-ASR-1.7B部署案例:高校科研组构建本地化学术讲座语音知识库
Qwen3-ASR-1.7B部署案例:高校科研组构建本地化学术讲座语音知识库 1. 项目背景与价值 高校科研团队经常举办各类学术讲座和研讨会,这些宝贵的学术内容通常以音频形式记录。传统的人工转录方式耗时耗力,且对于专业术语密集的学术内容&#x…...
