R语言中绘制火山图

news/2025/3/19 12:55:25/文章来源:https://www.cnblogs.com/liujiaxin2018/p/18780812

 

001、

# 生成随机数据
set.seed(123)  # 设置种子以便结果可重复
genes <- paste("Gene", 1:1000)  # 基因名称
logFC <- rnorm(1000, mean = 0, sd = 2)  # log2 fold change,均值为0,标准差为2的正态分布
pvalue <- runif(1000, min = 0, max = 1)  # p值,0到1之间的均匀分布
genes
logFC
pvalue
# 创建数据框
data <- data.frame(genes = genes, logFC = logFC, pvalue = pvalue)
head(data)# 添加一列来标记显著性
data$significant <- ifelse(abs(data$logFC) > 1 & data$pvalue < 0.05, "Significant", "Not Significant")
head(data)
# 绘制火山图
ggplot(data, aes(x = logFC, y = -log10(pvalue), color = significant)) +geom_point(alpha = 0.6, size = 1.5) +  # 绘制散点,alpha控制透明度,size控制点的大小scale_color_manual(values = c("grey", "red")) +  # 自定义颜色,显著基因用红色theme_minimal() +  # 使用简单的主题风格labs(title = "Volcano Plot", x = "Log2 Fold Change", y = "-Log10 P-value") +  # 添加标题和轴标签theme(plot.title = element_text(hjust = 0.5))  # 将标题居中ggplot(data, aes(x = logFC, y = -log10(pvalue), color = significant)) +geom_point(alpha = 0.6, size = 1.5) +scale_color_manual(values = c("grey", "red")) +theme_minimal() +labs(title = "Volcano Plot", x = "Log2 Fold Change", y = "-Log10 P-value") +theme(plot.title = element_text(hjust = 0.5)) +geom_vline(xintercept = c(-1, 1), linetype = "dashed", color = "blue") +  # 添加竖线,表示logFC的阈值geom_hline(yintercept = -log10(0.05), linetype = "dashed", color = "blue")  # 添加横线,表示p-value的阈值# 根据logFC和p-value进一步分类
data$expression <- ifelse(data$logFC > 1 & data$pvalue < 0.05, "Upregulated",ifelse(data$logFC < -1 & data$pvalue < 0.05, "Downregulated", "Not Significant"))# 查看数据框的前几行,确认分类是否正确
head(data)ggplot(data, aes(x = logFC, y = -log10(pvalue), color = expression)) +geom_point(alpha = 0.6, size = 1.5) +  # 绘制散点,透明度和点的大小scale_color_manual(values = c("blue", "grey", "red")) +  # 自定义颜色:下调为蓝色,不显著为灰色,上调为红色theme_minimal() +  # 简洁主题labs(title = "Volcano Plot", x = "Log2 Fold Change", y = "-Log10 P-value") +  # 添加标题和轴标签theme(plot.title = element_text(hjust = 0.5)) +  # 标题居中geom_vline(xintercept = c(-1, 1), linetype = "dashed", color = "black") +  # 添加阈值竖线geom_hline(yintercept = -log10(0.05), linetype = "dashed", color = "black")  # 添加阈值横线# 安装 ggrepel 包
# install.packages("ggrepel")# 加载 ggrepel 包
library(ggrepel)# 只标记显著的上调和下调基因
significant_genes <- data[data$expression != "Not Significant", ]# 绘制带基因标记的火山图
ggplot(data, aes(x = logFC, y = -log10(pvalue), color = expression)) +geom_point(alpha = 0.6, size = 1.5) +scale_color_manual(values = c("blue", "grey", "red")) +theme_minimal() +labs(title = "Volcano Plot", x = "Log2 Fold Change", y = "-Log10 P-value") +theme(plot.title = element_text(hjust = 0.5)) +geom_vline(xintercept = c(-1, 1), linetype = "dashed", color = "black") +geom_hline(yintercept = -log10(0.05), linetype = "dashed", color = "black") +#避免标签重叠的函数,可以让基因名称显得更加清晰。geom_text_repel(data = significant_genes, aes(label = genes), size = 3, box.padding = 0.3, point.padding = 0.3)ggplot(data, aes(x = logFC, y = -log10(pvalue), color = expression)) +geom_point(aes(size = -log10(pvalue), alpha = abs(logFC))) +  # 点的大小和透明度。#size = -log10(pvalue):显著性越高的点越大。#alpha = abs(logFC):log2 fold change 越大,点越不透明。scale_color_manual(values = c("blue", "grey", "red")) +theme_minimal() +labs(title = "Volcano Plot", x = "Log2 Fold Change", y = "-Log10 P-value") +theme(plot.title = element_text(hjust = 0.5)) +geom_vline(xintercept = c(-1, 1), linetype = "dashed", color = "black") +geom_hline(yintercept = -log10(0.05), linetype = "dashed", color = "black")# 为数据添加一个模拟条件列
data$condition <- sample(c("Condition A", "Condition B"), nrow(data), replace = TRUE)ggplot(data, aes(x = logFC, y = -log10(pvalue), color = expression)) +geom_point(alpha = 0.6, size = 1.5) +scale_color_manual(values = c("blue", "grey", "red")) +theme_minimal() +labs(title = "Volcano Plot", x = "Log2 Fold Change", y = "-Log10 P-value") +theme(plot.title = element_text(hjust = 0.5)) +geom_vline(xintercept = c(-1, 1), linetype = "dashed", color = "black") +geom_hline(yintercept = -log10(0.05), linetype = "dashed", color = "black") +facet_wrap(~ condition)  # 按条件分面显示# 安装 plotly 包
# install.packages("plotly")# 加载 plotly 包
library(plotly)p <- ggplot(data, aes(x = logFC, y = -log10(pvalue), color = expression)) +geom_point(alpha = 0.6, size = 1.5) +scale_color_manual(values = c("blue", "grey", "red")) +theme_minimal() +labs(title = "Volcano Plot", x = "Log2 Fold Change", y = "-Log10 P-value") +theme(plot.title = element_text(hjust = 0.5)) +geom_vline(xintercept = c(-1, 1), linetype = "dashed", color = "black") +geom_hline(yintercept = -log10(0.05), linetype = "dashed", color = "black")# 转换为交互式图形
ggplotly(p)

 。

 

 

source:

01、https://blog.csdn.net/zegeai/article/details/142934945

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows 系统安装 Python3.7 、3.8、3.9、3.10、 3.11 最新版,附带相应程序。

在 Windows 系统上下载和安装 Python 的教程: 下是 Python 3.7 到 3.11 每个版本在 Windows 64 位系统下最后更新版本的直接下载地址。 其他版本访问Python 官方网站。 Python 3.7.9此版本为 Python 3.7 系列最后更新版本,下载地址:python-3.7.9-amd64.exePython 3.8.10它是…

库存持有成本的底层运算逻辑是什么?

你可能会觉得,库存持有成本这个概念听起来有点抽象: 库存不就是放在仓库里待着吗,怎么还会“花钱”? 其实,库存持有成本就是你把货物放在仓库里,背后所产生的一系列费用。 这些费用包括仓库租金、保险费用、商品的折旧损耗,还有库存过期的风险等等。 今天,我们就来拆解…

Windows部署deepseek R1训练数据后通过AnythingLLM当服务器创建问答页面

如果要了解Windows部署Ollama 、deepseek R1请看我上一篇内容。 这是接上一篇的。 AnythingLLM是一个开源的全栈AI客户端,支持本地部署和API集成。它可以将任何文档或内容转化为上下文,供各种语言模型(LLM)在对话中使用。以下是关于Windows环境下使用AnythingLLM API的一些…

变量数据类型流程控制

常量变量 常量 1.概述:在代码的运行过程中,值不会发生改变的数据 2.分类:整数常量:所有整数小数常量:所有带小数点的2.5 1.5 2.0字符常量:带单引号的 单引号中必须有且只能有一个内容1(算) 11(不算) (不算) a1(不算) (算) (两个空格不算)写一个tab键(算) 字符…

Vue2-自定义创建项目、ESLint、Vuex及综合案例购物车

Vue2自定义创建项目 基于VueCli自定义创建项目架子 步骤:安装VueCLI脚手架npm i @vue/cli -g 可以通过vue --version 判断是否下载VueCLI在某个文件夹中创建vue项目vue create 项目名称 (项目名中不能包含大写字母)选择Manually select features选择Babel(语法降级)、Ro…

yum install -y devtoolset-8-gcc*

如果执行结果为上面这个结果的话,需要执行以下操作 yum install centos-release-scl*修改CentOS-SCLo-scl.repo文件 baseurl=https://mirrors.aliyun.com/centos/7/sclo/x86_64/rh/ 和 gpgcheck=0修改CentOS-SCLo-scl-rh.repo文件和上面一样查看 [root@iZbp153shsqfoddljmkit4…

几个技巧,教你去除文章的 AI 味!

给大家分享一些快速去除文章 AI 味的小技巧,有些是网上被分享过的,也有些是我个人的经验。学会之后,无论是写工作文案、毕业设计、自媒体文章,还是平时生活中写写好评,都是非常轻松的。最近有不少朋友在利用 AI 写毕业设计论文,几秒钟一篇文章就刷出来的,爽的飞起。 结果…

Sci Chart中的XyDataSeries与UniformXyDataSeries

在 SciChart 中,XyDataSeries 和 UniformXyDataSeries 是两种用于处理数据序列的核心类,主要差异体现在数据存储方式、性能优化及适用场景上。 以下是具体对比: 1. 数据存储与结构差异 **XyDataSeries<TX, TY>** 需要同时存储 X 和 Y 值的完整坐标对。例如,对于每个数…

强化学习基础_基于价值的强化学习

Action-Value Functions 动作价值函数 折扣回报(Discounted Return) 折扣回报 Ut 是从时间步 t 开始的累积奖励,公式为: Rt 是在时间步 t 获得的奖励。γ 是折扣因子(0<γ<1),用于减少未来奖励的权重。这是因为未来的奖励通常不如当前奖励重要,例如在金融领域,未…

USB杂谈

一、USB控制器 OHCI 1.0、1.1控制器 UHCI:1.0、1.1控制器 EHCI 2.0控制器 XHCI 3.0控制器 EHCI 2.0控制器 HID:人机交互接口,鼠标、手柄 、键盘、扫描枪USB协议中对集线器的层数是有限制的,USB1.1规定最多为5层,USB2.0规定最多为7层。 理论上,一个USB主控制器最多可接127个…

2025年3月中国数据库排行榜:PolarDB夺魁傲群雄,GoldenDB晋位入三强

2025年3月排行榜解读出炉,榜单前四现波动,PolarDB时隔半年重返榜首、GoldenDB进入前三,此外更有一些新星产品表现亮眼!欢迎阅读、一起盘点~阳春三月,万物复苏。2025年3月中国数据库流行度排行榜的发布,不仅展现了中国数据库企业在技术创新、生态建设和应用深化方面的显著…