R-带指定基因标签的火山图

一、数据准备

二、R代码

# 清除当前环境中的所有对象
rm(list=ls())

# 获取当前工作目录
getwd()

# 设置工作路径
#setwd("") #设置工作路径

# 列出当前工作目录下的所有文件
list.files()

# 加载使用的包
library(openxlsx) # 用于读写Excel文件
library(ggplot2) # 用于数据可视化
library(ggrepel) # 用于在ggplot2中添加带排斥效果的文本标签

# 加载绘制火山图的数据表格
data<-read.xlsx("DEG_SYMBOL.xlsx") # 从Excel文件读取数据

# 将padj列转换为数值类型
data$padj<-as.numeric(data$padj)

# 创建一个新的列'threshold',根据padj值和log2FoldChange值来判断基因是上调、下调还是无显著变化
data$threshold <- factor(ifelse(data$padj < 0.05 & abs(data$log2FoldChange) >= 1, 
                                ifelse(data$log2FoldChange >= 1, 'up', 'down'), 'no'),
                         levels=c('up', 'down', 'no'))

# 统计每个分类的数量
table(data$threshold)

# 计算上调基因的数量
up<-as.numeric(table(data$threshold)[1])
#up

# 计算下调基因的数量
down<-as.numeric(table(data$threshold)[2])
#down

# 计算无显著变化基因的数量
no.diff<-as.numeric(table(data$threshold)[3])
#no.diff

# 重新计算 'up'、'down' 和 'no' 的计数,这次使用sum函数
up <- sum(data$padj < 0.05 & data$log2FoldChange >= 1)
down <- sum(data$padj < 0.05 & data$log2FoldChange < -1)
no.diff <- sum(!(data$padj < 0.05) | (abs(data$log2FoldChange) < 1))

# 创建因子列 'threshold' 并设置标签,显示每个分类的数量
data$threshold <- factor(ifelse(data$padj < 0.05 & abs(data$log2FoldChange) >= 1,
                                ifelse(data$log2FoldChange >= 1, 'up', 'down'), 'no'),
                         levels = c('up', 'down', 'no'),
                         labels = c(paste("up:", up), paste("down:", down), paste("no:", no.diff)))

# 将带有标签的数据写入新的Excel文件
write.xlsx(data,"data_label.xlsx")

# 开始创建PDF文件,用于保存火山图
pdf("voc_plot.pdf")
#head(data)

# 设置火山图的最低和最高log2FoldChange值(阈值线位置)
left_line <- -1
right_line <- 1

# 查看数据的前几行
head(data)

# 绘制火山图
# 创建火山图对象P
plot <- ggplot(data, aes(x = log2FoldChange, y = -log10(padj), color = threshold)) +
  # 添加点图层,设置点的大小为1,透明度为0.5
  geom_point(size = 1, alpha = 0.5) + 
  # 使用白色背景主题
  theme_bw() + 
  # 自定义图表主题,包括图例标题为空,文本大小为14,坐标轴标题和文本大小为14和12,图例文本大小为12
  theme(legend.title = element_blank(),
        text = element_text(size = 14), 
        axis.title = element_text(size = 14), 
        axis.text = element_text(size = 12), 
        legend.text = element_text(size = 12)) + 
  # 设置y轴标签为'-log10 (p.adj)'
  ylab('-log10 (p.adj)') + 
  # 设置x轴标签为'log2 (FoldChange)'
  xlab('log2 (FoldChange)') + 
  # 添加垂直虚线,表示log2FoldChange的阈值,线型为3(虚线),颜色为黑色,线宽为0.5
  geom_vline(xintercept = c(left_line, right_line), lty = 3, col = "black", lwd = 0.5) + 
  # 添加水平虚线,表示p值调整后的阈值,线型为3(虚线),颜色为黑色,线宽为0.5
  geom_hline(yintercept = -log10(0.05), lty = 3, col = "black", lwd = 0.5) + 
  # 对于数据中show列为"YES"的点,添加排斥效果的文本标签,显示基因符号,文本大小为4,线段颜色为黑色
  geom_text_repel(data = data[data$show == "YES",], 
                  aes(label = Symbol), 
                  size = 4, 
                  segment.color = "black", 
                  color = "black", 
                  min.segment.length = 0, 
                  max.overlaps = 18000) + 
  # 手动设置颜色比例尺,为不同的阈值类别设置不同的颜色
  scale_color_manual(values = c("#0000FF", "#FF0000", "#696969")) + 
  # 设置坐标系,x轴限制为从负无穷到log2FoldChange的最大值
  coord_cartesian(xlim = c(NA, max(data$log2FoldChange)))

print(plot)

# 关闭PDF设备,完成火山图的保存
dev.off()

三、结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值