[R語言] ggplot2 火山圖

代碼主要供個人存檔用,
格式整理的比較清楚可以直接運行,

原始數(shù)據(jù):
https://pan.baidu.com/s/1VIxChAtehGFV065q4YJI7w
提取碼:xmkq
轉(zhuǎn)載請注明:陳熹 chenx6542@foxmail.com (簡書號:半為花間酒)

如有疑問歡迎交流。

library(ggplot2)
library(extrafont)
# 注冊字體
loadfonts(device="win")

# 字體也可以用以下方式設(shè)置
windowsFonts(HEL=windowsFont("Helvetica CE 55 Roman"),
             RMN=windowsFont("Times New Roman"),
             ARL=windowsFont("Arial"),
             JBM=windowsFont("JetBrains Mono"))

# 讀取數(shù)據(jù)文件
data <- readr::read_delim("data.txt", delim = "\t")

# 數(shù)據(jù)預處理
filter_data <- data %>%
  # 去重
  na.omit() %>%
  # 去無限值
  filter(!is.infinite(log2FC)) %>%
  # 標注因子
  mutate(Gene_type = case_when(
    log2FC >= 1 & q_value < 0.05 ~ "Up",
    log2FC <= -1 & q_value < 0.05 ~ "Down",
    TRUE ~ "Stream")
  )

# 篩選要標注的感興趣基因
for_label <- filter_data %>%
  filter((log2FC < -5.5 & -log10(q_value) > 2) |
    (log2FC > 2.7 & -log10(q_value) > 3.5) |
    (log2FC > 2 & -log10(q_value) > 2.1 & -log10(q_value) < 2.4) |
    (log2FC > 3 & -log10(q_value) > 1 & -log10(q_value) < 1.5))

# 畫圖
volcano <- ggplot(
    data = filter_data, 
    aes(x = log2FC, y = -log10(q_value))
    ) + 
  geom_point(
    shape = 21,
    # 選擇標色的列別
    aes(fill = Gene_type),
    color = "white",
    na.rm = T,
    position = "jitter"
    ) +
  scale_fill_manual(
    # 指定標色
    values =
      c("steelblue", "grey60", "orangered")
    ) +
  labs(title = "Volcanoplot"
    ) +
  # 表達式改變x軸標簽
  xlab(expression(log[2]("Fold Change"))
    ) +
  # 表達式改變y軸標簽
  ylab(expression(-log[10]("q.value"))
    ) +
  # 增加y輔助線
  geom_hline(
    yintercept = -log10(0.05),
    linetype = "dashed",
    size = 1,
    color = "grey50"
    ) +
  # 增加x輔助線
  geom_vline(
    xintercept = c(-1, 1),
    linetype = "dashed",
    size = 1,
    color = "grey50"
  ) +
  # 限制x軸范圍
  scale_x_continuous(
  # 使數(shù)據(jù)緊貼坐標軸
    expand = c(0, 0),
    limits = c(-11, 11)
  ) +
  # 限制y軸范圍
  scale_y_continuous(
    expand = c(0, 0),
    limits = c(0, 4)
  ) +
  # 去除背景
  theme_bw() + 
  theme(
    # 去除網(wǎng)格線
    panel.grid.major = element_blank(),
    panel.grid.minor = element_blank(), 
    # x,y坐標軸標簽名和文本名的設(shè)置,包括size color face
    axis.title.x = element_text(size = 18),
    axis.title.y = element_text(size = 18),
    axis.text.x = element_text(size = 15),
    axis.text.y = element_text(size = 15),
    # 主標題的文本設(shè)置
    plot.title = element_text(
      hjust = 0.5,
      size = 20,
      face = "bold"
    ),
    # 對圖例字號調(diào)整
    legend.text = element_text(size = 15),
    # 去除圖例標題
    legend.title = element_blank(), 
    # 修改圖例位置
    legend.position = c(0.1, 0.45), 
    # 去除圖例背景,主圖背景已經(jīng)去除故也可不加
    legend.background = element_blank(),
    # 去除圖例圓圈背景
    legend.key = element_rect(fill = "NA"),
    # 設(shè)置全部文本字體,也可以單獨設(shè)置
    text = element_text(family="Arial")
  ) +
  # 修改圖例圈圈大小,參數(shù)需要和映射的差異因子對應(yīng)
  guides(fill = guide_legend(
    override.aes =
      list(size = 3)
    )
  ) 


# 主圖加上基因標記
# 第一種:直接加文本
p1 <- volcano + geom_point(
    data = for_label, shape = 1, size = 2
  ) +
  ggrepel::geom_text_repel(
    # 根據(jù)for_label的結(jié)果加上名字
    aes(label = c(
      "Gene_219", "Gene_615", "Gene_627",
      "Gene_5196", "Gene_6666", "Gene_8399"
    )),
    color = c('orangered', 'orangered', 'steelblue',
              'steelblue','steelblue','orangered'),
    box.padding = unit(0.5, "lines"),
    point.padding = unit(0.7, "lines"),
    data = for_label,
    show.legend = F,
    segment.color = 'grey20', 
    size = 5.5
  ); p1



# 第二種:加標簽,顏色可以自己再設(shè)定,本圖我未設(shè)置
p2 <- volcano + geom_point(
  data = for_label, shape = 1, size = 2
  ) +
  ggrepel::geom_label_repel(
    # 根據(jù)for_label的結(jié)果加上名字
    aes(label = c(
      "Gene_219", "Gene_615", "Gene_627",
      "Gene_5196", "Gene_6666", "Gene_8399"
    )),
    data = for_label,
    color = "grey10",
    size = 5.5
  ); p2
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、安裝kermit s@ubuntu:~$ sudo apt-get install ckermit 二、配置k...
    和光同塵SCW閱讀 1,187評論 0 0
  • 2017,上半年我在學校度過。 6月13日,剛好20歲,踏進了職場,開始了實習生生涯。 所幸,能夠一家相對不錯的單...
    雅說閑談閱讀 187評論 0 0
  • 五月十二日是母親節(jié),這時我想起了游子吟,慈母手中線,游子身上衣,臨行密密縫,意恐遲遲歸,誰言寸草心,報得三春歸。母...
    f67a9bc604d8閱讀 156評論 0 2
  • 抓緊放個毒,都來問為啥今天那么多步數(shù),其實不多啦,我的圈子里34000只能排44位,在那些神面前,我只是只快樂蝸牛...
    富外婆閱讀 1,473評論 4 8

友情鏈接更多精彩內(nèi)容