R语言用EnhancedVolcano和ggplot画同一数据的火山图

getwd()

#下载方式有很多,挑自己能下载的办法下载好几个包就好,我们用自带的数据就好

install.packages("SeuratData")
devtools::install_github('satijalab/seurat-data')
library(SeuratData)
library(Seurat)
library(airway)
library(magrittr)
#加载火山图的包
install.packages('BiocManager')
#install.packages("EnhancedVolcano")
devtools::install_github('kevinblighe/EnhancedVolcano')
library(EnhancedVolcano)
#控制数据大小(读取时间))
getOption('timeout')
options(otimeout=10000)

#载入PBMC3k数据,已经是一个seurat结构
#InstallData("pbmc3k")
data(pbmc3k)
pbmc3k
str(pbmc3k)
head(pbmc3k,5)#有一个注释群在

#final是处理过的pbmc3k数据
sce <- pbmc3k.final
#展示数据
sce
head(sce,5)#这个东西被降维,计算线粒体基因等一系列操作了
table(Idents(sce))#展示一下ident
pbmc3k@meta.data$seurat_annotations #展示一下注释

#寻找两个群之间的高变基因
deg = FindMarkers(sce,ident.1 = 'NK', ident.2 = 'B')
head(deg[order(deg$p_val),])#根据P值排序

这个包的内容非常丰富,有时间再多整理出来吧
#lab=rownames 设置标签(gene名字)
#xlim = c(-17, 13)、ylim=c(1,6):设置x、y轴的展示区间
#pCutoff = 0.001、FCcutoff = 2:自定义阈值线划分的范围,也就是那两个虚线。
#cutoffLineCol  自定义阈值线的颜色
#cutoffLineType  自定义阈值线的类型
#cutoffLineWidth    自定义阈值线的宽度
#pointSize 点的大小默认是2
#shape=19
#subtitle 是title下面那个title
#caption 是右下角的title
#titleLabSize,subtitleLabSize,captionLabSize三个标题的大小,默认是14
EnhancedVolcano(deg,
                lab = rownames(deg),
                #xlim = c(-5,7),
                #ylim = c(0,100),
                #pCutoff = 0.01,
                #FCcutoff = 4,
                x = 'avg_log2FC',
                y = 'p_val_adj',
                #subtitle = F,
                #caption = "what",
                #cutoffLineCol = "red",
                #titleLabSize = 14,
                #shape=16,
                #pointSize=5,
                title = "NK vs B",)

deg$p_val_adj
deg$avg_log2FC

#用ggplo去画图,同一组数据
deg$threshold<-as.factor(ifelse(deg$avg_log2FC >= 2,'Up',ifelse(deg$p_val_adj<0.05 & deg$avg_log2FC <= -2,'Down','Not')))
deg<-data.frame(deg)
ggplot(data=deg, aes(x=avg_log2FC, y=-log10(p_val_adj), colour=threshold, fill=threshold)) +
  scale_color_manual(values=c("blue", "grey","red"))+
  geom_point(alpha=0.6,size=2) +
  #xlim(c(-6, 6)) +
  #ylim(c(0, 300)) +
  theme_bw(base_size = 12, base_family = "Times") +
  geom_vline(xintercept=c(-2,2),lty=1,col=c("blue","red"),lwd=0.6)+
  geom_hline(yintercept = -log10(0.05),lty=2,col="black",lwd=0.6)+
  theme(legend.position="right",
        panel.grid=element_blank(),
        legend.title = element_blank(),
        legend.text= element_text(face="bold", color="black",family = "Times", size=8),
        plot.title = element_text(hjust = 0.5),
        axis.text.x = element_text(color="black", size=12),
        axis.text.y = element_text(color="black", size=12),
        axis.title.x = element_text(face="bold", color="black", size=12),
        axis.title.y = element_text(face="bold",color="black", size=12))+
  labs(x="log2 (Fold Change)",y="-log10 (p-value)",title="NK vs B")

 

 ggplot封装的东西比较少,还是没那么方便

<think>好的,用户想了解如何用R语言绘制火山,并需要示例代码技术教程。首先,我需要回忆火山的基本概念用途。火山通常用于基因表达分析,展示差异表达的基因,其中x轴是log2折叠变化(log2FC),y轴是-log10(p值),这样能同时显示变化的幅度统计显著性。 接下来,用户明确提到使用R语言,所以我要考虑R中常用的绘包。常见的包括ggplot2EnhancedVolcano包。EnhancedVolcano是专门为火山设计的,可能更简便。而ggplot2则更灵活,适合自定义。两种方法都应该涵盖,让用户有选择。 然后,我需要检查是否有现成的示例代码。根据之前提供的引用,用户可能已经看过Python的示例,但这里需要R的。确保代码语法正确,符合用户的要求。例如,数据准备部分,可能需要生成模拟数据或使用内置数据集。但考虑到用户可能需要直接可运行的代码,生成模拟数据更合适,因为内置数据集可能不容易获取。 对于EnhancedVolcano包的方法,需要确认包是否可用,可能需要安装。在示例代码中,应该包含安装指令,比如BiocManager::install("EnhancedVolcano"),然后加载包。绘函数参数需要解释清楚,比如设置xy的列名,标题,调整颜色标签等。 对于ggplot2的方法,需要构造数据框,然后使用geom_point绘制散点,设置颜色主题。同时,添加阈值线,比如log2FC的1.5倍p值的0.05,并用geom_hlinegeom_vline实现。此外,标签部分可能需要使用geom_text或ggrepel来避免重叠,但示例中可能简化处理。 另外,需要确保代码中的注释清晰,解释每一步的作用。比如数据模拟部分如何生成log2FCp值,如何设置显著性的条件。同时,提醒用户如何替换实际数据,比如从文件中读取,或调整参数。 用户可能还关心如何自定义形,比如颜色、标签、标题等,所以在代码中要展示这些可调整的部分。同时,注意LaTeX格式的使用,比如在注释或解释中提到数学表达式时,用$...$包裹,例如$log_2(FoldChange)$。 最后,生成相关问题,考虑用户可能的后续需求,比如美化形、处理大数据集、添加基因标签、解读火山结果等。这些问题能帮助用户深入学习解决问题。 需要验证代码是否正确,比如模拟数据是否合理,绘函数是否有误。例如,在EnhancedVolcano中,是否所有参数都正确,比如selectLab是否指向需要标注的基因名称。在ggplot2中,颜色映射是否基于条件,阈值线是否正确。 总结,步骤包括:介绍火山作用,提供两种方法(EnhancedVolcanoggplot2)的示例代码,解释代码各部分,并给出相关问题。确保回答结构清晰,代码可运行,注释充分,符合用户的技术教程需求。</think>### R语言绘制火山示例教程 火山常用于展示基因表达差异分析结果,通过$log_2(FoldChange)$(x轴)$-log_{10}(pvalue)$(y轴)两个维度,直观显示显著差异表达的基因[^1]。以下是两种实现方法: --- #### 方法一:使用EnhancedVolcano包 ```r # 安装包(若未安装) if (!require("BiocManager")) install.packages("BiocManager") BiocManager::install("EnhancedVolcano") # 加载包 library(EnhancedVolcano) # 模拟数据(替换为实际数据框) set.seed(123) data <- data.frame( Gene = paste0("Gene", 1:1000), log2FC = rnorm(1000, sd = 2), pvalue = 10^(-runif(1000, 0, 5)) ) # 绘制火山 EnhancedVolcano(data, lab = data$Gene, # 基因标签 x = "log2FC", # x轴列名 y = "pvalue", # y轴列名 pCutoff = 0.05, # p值阈值 FCcutoff = 1.5, # FoldChange阈值 title = "Volcano Plot Demo", subtitle = "Differential Expression Analysis" ) ``` --- #### 方法二:使用ggplot2基础绘 ```r library(ggplot2) # 创建数据(含显著性标记) data$significant <- ifelse( abs(data$log2FC) > 1.5 & data$pvalue < 0.05, "Significant", "Not Significant" ) # 基础绘 ggplot(data, aes(x = log2FC, y = -log10(pvalue))) + geom_point(aes(color = significant), alpha = 0.6) + scale_color_manual(values = c("gray", "red")) + geom_hline(yintercept = -log10(0.05), linetype = "dashed") + # p值阈值线 geom_vline(xintercept = c(-1.5, 1.5), linetype = "dashed") + # FC阈值线 labs(title = "Volcano Plot with ggplot2", x = expression(log[2]("FoldChange")), y = expression(-log[10]("p-value"))) + theme_minimal() ``` --- ### 关键参数说明 1. **数据要求**:输入数据需包含$log_2(FoldChange)$$pvalue$两列 2. **阈值调整**:`pCutoff``FCcutoff`控制显著性判断标准 3. **形美化**:通过`color`/`size`调整点属性,`theme()`修改主题样式
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

18kkk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值