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)


 

 

代码解释:

  1. 加载ggplot2包。
  2. 创建示例数据集,设置随机数种子以保持结果的一致性。
  3. 修改数据集中的变量名称。
  4. 为数据集添加一个新列Label,前10行包含1到10的值,其余行包含NA值。
  5. 使用ggplot()函数创建散点图,设置X轴为Log2FoldChange,Y轴为-log10(PAdj)
  6. 添加横向水平参考线,位置为-log10(0.05)
  7. 添加纵向垂直参考线,位置为-1.21.2
  8. 添加散点图,设置散点的大小和颜色与-log10(PAdj)成比例。
  9. 指定颜色渐变模式。
  10. 指定散点大小渐变模式。
  11. 调整图像主题。
  12. 打印绘制

调整优化:

在火山图上标注有意义的点,我们可以使用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