SCI图片复现:渐变火山图
# 加载包:
library(ggplot2)
# 创建示例数据集:
set.seed(42) # 为了保持随机生成的结果一致性
sample_size <- 5000
data <- data.frame(log2FoldChange = rnorm(sample_size, 0, 1.5),
padj = runif(sample_size, 0, 1))
# 显示数据的前几行
head(data)
# 修改变量名称:
data <- data.frame(Log2FoldChange = data$log2FoldChange,
PAdj = data$padj)
# 新增一列用于存储label信息,将需要显示的label列出即可:
data$Label <- c(1:10, rep(NA, (nrow(data) - 10)))
# 创建散点图:
plot <- ggplot(data, aes(Log2FoldChange, -log10(PAdj))) +
# 横向水平参考线:
geom_hline(yintercept = -log10(0.05), linetype = "dashed", color = "#999999") +
# 纵向垂直参考线:
geom_vline(xintercept = c(-1.2, 1.2), linetype = "dashed", color = "#999999") +
# 散点图:
geom_point(aes(size = -log10(PAdj), color = -log10(PAdj))) +
# 指定颜色渐变模式:
scale_color_gradientn(values = seq(0, 1, 0.2),
colors = c("#39489f", "#39bbec", "#f9ed36", "#f38466", "#b81f25")) +
# 指定散点大小渐变模式:
scale_size_continuous(range = c(1, 3)) +
# 主题调整:
theme_bw() +
theme(panel.grid = element_blank())
# 显示绘制的图像
print(plot)
代码解释:
- 加载
ggplot2
包。 - 创建示例数据集,设置随机数种子以保持结果的一致性。
- 修改数据集中的变量名称。
- 为数据集添加一个新列
Label
,前10行包含1到10的值,其余行包含NA值。 - 使用
ggplot()
函数创建散点图,设置X轴为Log2FoldChange
,Y轴为-log10(PAdj)
。 - 添加横向水平参考线,位置为
-log10(0.05)
。 - 添加纵向垂直参考线,位置为
-1.2
和1.2
。 - 添加散点图,设置散点的大小和颜色与
-log10(PAdj)
成比例。 - 指定颜色渐变模式。
- 指定散点大小渐变模式。
- 调整图像主题。
- 打印绘制
调整优化:
在火山图上标注有意义的点,我们可以使用geom_text()
函数。我们可以设置阈值,例如Log2FoldChange
的绝对值大于某个值(例如1.5)且PAdj
值小于0.05,作为显著的点。下面的代码演示了如何在火山图上标注显著的点:
# 创建散点图:
plot <- ggplot(data, aes(Log2FoldChange, -log10(PAdj))) +
# 横向水平参考线:
geom_hline(yintercept = -log10(0.05), linetype = "dashed", color = "#999999") +
# 纵向垂直参考线:
geom_vline(xintercept = c(-1.5, 1.5), linetype = "dashed", color = "#999999") +
# 散点图:
geom_point(aes(size = -log10(PAdj), color = -log10(PAdj))) +
# 指定颜色渐变模式:
scale_color_gradientn(values = seq(0, 1, 0.2),
colors = c("#39489f", "#39bbec", "#f9ed36", "#f38466", "#b81f25")) +
# 指定散点大小渐变模式:
scale_size_continuous(range = c(1, 3)) +
# 主题调整:
theme_bw() +
theme(panel.grid = element_blank()) +
# 在显著的点上添加标签:
geom_text(data = subset(data, (abs(Log2FoldChange) > 1.5) & (PAdj < 0.05)),
aes(label = Label), size = 3, hjust = -0.5, vjust = -0.5)
# 显示绘制的图像
print(plot)
在这个代码中,我们添加了一个geom_text()
函数,并根据给定条件筛选数据(Log2FoldChange
的绝对值大于1.5且PAdj
值小于0.05)。我们还设置了标签的大小、水平和垂直对齐参数,以便在显著点旁边进行标注。
阅读剩余
THE END