夜夜躁很很躁日日躁麻豆,精品人妻无码,制服丝袜国产精品,成人免费看www网址入口

網(wǎng)易首頁 > 網(wǎng)易號 > 正文 申請入駐

一文搞定!火山圖在意不在形!

0
分享至


# ======================
# 火山圖多風格整合代碼
# 包含6種不同風格的火山圖實現(xiàn)
# ======================

# 1. 環(huán)境設(shè)置與包加載 ----
rm(list = ls())
options(stringsAsFactors = F)

# 安裝缺失的包
if (!requireNamespace("ggplot2", quietly = TRUE)) install.packages("ggplot2")
if (!requireNamespace("ggrepel", quietly = TRUE)) install.packages("ggrepel")
if (!requireNamespace("dplyr", quietly = TRUE)) install.packages("dplyr")
if (!requireNamespace("export", quietly = TRUE)) install.packages("export")
if (!requireNamespace("ggforce", quietly = TRUE)) install.packages("ggforce")
if (!requireNamespace("plotly", quietly = TRUE)) install.packages("plotly")
if (!requireNamespace("htmlwidgets", quietly = TRUE)) install.packages("htmlwidgets")
if (!requireNamespace("gridExtra", quietly = TRUE)) install.packages("gridExtra")

# 加載包
library(ggplot2)
library(ggrepel)
library(dplyr)
library(export)
library(ggforce)
library(plotly)
library(htmlwidgets)
library(gridExtra)

# 2. 創(chuàng)建模擬數(shù)據(jù)集 ----
set.seed(123)
n_genes <- 2000
dataset <- data.frame(
  gene = paste0("GENE", 1:n_genes),
  logFC = c(rnorm(n_genes*0.8, 0, 0.5), 
            rnorm(n_genes*0.1, 2, 0.5), 
            rnorm(n_genes*0.1, -2, 0.5)),
  P.Value = c(runif(n_genes*0.8, 0.01, 1), 
              runif(n_genes*0.2, 0.0001, 0.05))
)

# 添加變化類型和標簽
dataset <- dataset %>%
  mutate(
    change = case_when(
      P.Value < 0.05 & logFC >= 1 ~ "Up",
      P.Value < 0.05 & logFC <= -1 ~ "Down",
      TRUE ~ "Stable"
    ),
    label = ifelse(change != "Stable", gene, "")
  )

# 3. 基礎(chǔ)火山圖 ----
basic_volcano <- ggplot(dataset, aes(logFC, -log10(P.Value))) +
  geom_point(aes(color = change), size = 2, alpha = 0.7) +
  scale_color_manual(values = c("Down" = "blue", "Stable" = "gray60", "Up" = "red")) +
  geom_hline(yintercept = -log10(0.05), linetype = "dashed", color = "gray30") +
  geom_vline(xintercept = c(-1, 1), linetype = "dashed", color = "gray30") +
  labs(title = "Basic Volcano Plot",
       x = "log2(Fold Change)",
       y = "-log10(p-value)",
       color = "Expression") +
  theme_bw() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14),
    legend.position = "top"
  ) +
  geom_text_repel(
    data = dataset %>% filter(change != "Stable") %>% 
      slice_min(P.Value, n = 10),
    aes(label = label),
    size = 3,
    max.overlaps = 20
  )

# 4. 現(xiàn)代簡約風格 ----
modern_volcano <- ggplot(dataset, aes(logFC, -log10(P.Value))) +
  geom_point(aes(fill = change, size = abs(logFC)), 
             shape = 21, color = "white", stroke = 0.3, alpha = 0.8) +
  scale_fill_manual(values = c("Down" = "#4E79A7", "Stable" = "gray80", "Up" = "#E15759")) +
  scale_size_continuous(range = c(1, 5), guide = "none") +
  geom_hline(yintercept = -log10(0.05), linetype = "dashed", color = "gray40") +
  geom_vline(xintercept = c(-1, 1), linetype = "dashed", color = "gray40") +
  labs(title = "Modern Volcano Plot",
       x = "log2(Fold Change)",
       y = "-log10(p-value)",
       fill = "Expression") +
  theme_minimal() +
  theme(
    panel.grid.minor = element_blank(),
    panel.grid.major = element_line(color = "gray90"),
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    legend.position = "bottom"
  ) +
  ggrepel::geom_text_repel(
    data = dataset %>% filter(P.Value < 0.001 & abs(logFC) > 1.5),
    aes(label = label),
    size = 3.5,
    box.padding = 0.3,
    point.padding = 0.1,
    segment.color = "grey50"
  )

# 5. 學術(shù)黑白風格 ----
academic_volcano <- ggplot(dataset, aes(logFC, -log10(P.Value))) +
  geom_point(aes(shape = change), size = 2.5, alpha = 0.7, fill = "black") +
  scale_shape_manual(values = c("Down" = 25, "Stable" = 21, "Up" = 24)) +
  geom_hline(yintercept = -log10(0.05), linetype = "dashed") +
  geom_vline(xintercept = c(-1, 1), linetype = "dashed") +
  labs(title = "Academic Volcano Plot",
       x = "log2(Fold Change)",
       y = "-log10(p-value)",
       shape = "Expression") +
  theme_classic() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14),
    legend.position = "right",
    axis.line = element_line(color = "black"),
    axis.ticks = element_line(color = "black")
  ) +
  annotate("text", x = -2.5, y = -log10(0.05)+0.3, 
           label = "p = 0.05", size = 3) +
  annotate("text", x = 1.8, y = max(-log10(dataset$P.Value))-0.5, 
           label = "Up-regulated", size = 4, fontface = "italic") +
  annotate("text", x = -1.8, y = max(-log10(dataset$P.Value))-0.5, 
           label = "Down-regulated", size = 4, fontface = "italic")

# 6. 漸變火山圖 ----
gradient_volcano <- ggplot(dataset, aes(logFC, -log10(P.Value))) +
  geom_point(aes(color = -log10(P.Value), size = abs(logFC)*0.8 + 1), 
             alpha = 0.8) +
  scale_color_gradientn(
    colours = c("#313695", "#4575B4", "#74ADD1", "#ABD9E9", "#E0F3F8", 
                "#FFFFBF", "#FEE090", "#FDAE61", "#F46D43", "#D73027", "#A50026"),
    name = "-log10(p-value)",
    limits = c(0, max(-log10(dataset$P.Value))),
    breaks = c(1, 2, 3, 4)
  ) +
  geom_hline(yintercept = -log10(0.05), linetype = "dashed", color = "gray30") +
  geom_vline(xintercept = c(-1, 1), linetype = "dashed", color = "gray30") +
  labs(title = "Gradient Volcano Plot",
       x = "log2(Fold Change)",
       y = "-log10(p-value)") +
  theme_bw() +
  theme(
    plot.title = element_text(hjust = 0.5, face = "bold", size = 14),
    legend.position = "right",
    panel.grid = element_line(color = "gray95")
  ) +
  ggrepel::geom_text_repel(
    data = dataset %>% filter(-log10(P.Value) > 3 & abs(logFC) > 1.5),
    aes(label = label),
    size = 3,
    box.padding = 0.4,
    segment.color = "grey40"
  )

# 7. 傾斜火山圖(45度視角) ----
tilted_volcano <- ggplot(dataset, aes(logFC, -log10(P.Value))) +
  geom_point(aes(fill = change), 
             shape = 21, color = "white", size = 3, alpha = 0.7) +
  scale_fill_manual(values = c("Down" = "#1F77B4", "Stable" = "gray80", "Up" = "#FF7F0E")) +
  labs(title = "Tilted Volcano Plot (45° Perspective)",
       x = "log2(Fold Change)",
       y = "-log10(p-value)",
       fill = "Expression") +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, margin = margin(b = 15)),
    legend.position = "bottom"
  ) +
  # 應(yīng)用45度視角變換
  coord_trans(
    x = ggforce::trans_reverser("identity"),
    y = "identity"
  ) +
  # 添加對角線參考線
  geom_abline(slope = 1, intercept = 0, linetype = "dashed", alpha = 0.3, color = "gray40") +
  geom_abline(slope = -1, intercept = 0, linetype = "dashed", alpha = 0.3, color = "gray40") +
  # 添加閾值線
  geom_hline(yintercept = -log10(0.05), linetype = "dotted", alpha = 0.5) +
  geom_vline(xintercept = c(-1, 1), linetype = "dotted", alpha = 0.5) +
  # 添加象限標注
  annotate("text", x = -3, y = 5, label = "Low FC\nHigh Sig", size = 3.5, color = "gray30") +
  annotate("text", x = 3, y = 5, label = "High FC\nHigh Sig", size = 3.5, color = "gray30") +
  annotate("text", x = -3, y = 0.5, label = "Low FC\nLow Sig", size = 3.5, color = "gray30") +
  annotate("text", x = 3, y = 0.5, label = "High FC\nLow Sig", size = 3.5, color = "gray30")

# 8. 3D火山圖(交互式) ----
# 添加第三維度數(shù)據(jù)(模擬表達量)
dataset$Expression <- rnorm(nrow(dataset), mean = 10, sd = 3) + abs(dataset$logFC)*2

# 創(chuàng)建顏色映射
color_map <- c("Up" = "#FF0000", "Down" = "#0000FF", "Stable" = "#CCCCCC")
dataset$color <- color_map[dataset$change]

# 創(chuàng)建3D火山圖
volcano3d <- plot_ly(
  data = dataset,
  x = ~logFC,
  y = ~-log10(P.Value),
  z = ~Expression,
  type = "scatter3d",
  mode = "markers",
  marker = list(
    size = ~-log10(P.Value)*0.8 + 3,
    color = ~color,
    opacity = 0.7,
    line = list(width = 0)
  ),
  text = ~paste(
    "Gene: ", gene,
    " logFC: ", round(logFC, 3),
    " p-value: ", format.pval(P.Value, digits = 2),
    " Expression: ", round(Expression, 1)
  ),
  hoverinfo = "text"
) %>%
  layout(
    title = list(text = "3D Volcano Plot", y = 0.95),
    scene = list(
      xaxis = list(title = "log2(Fold Change)"),
      yaxis = list(title = "-log10(p-value)"),
      zaxis = list(title = "Expression Level"),
      camera = list(
        eye = list(x = 1.8, y = 1.8, z = 0.8)  # 調(diào)整視角
      )
    ),
    margin = list(l = 0, r = 0, b = 0, t = 40),
    showlegend = FALSE
  ) %>%
  add_annotations(
    x = 0.05,
    y = 0.95,
    xref = "paper",
    yref = "paper",
    text = "Color Legend: Red: Up-regulated Blue: Down-regulated",
    showarrow = FALSE,
    font = list(size = 12)
  )

# 9. 保存所有圖形 ----
# 保存2D圖形
graph2png(basic_volcano, "basic_volcano.png", width = 9, height = 7)
graph2png(modern_volcano, "modern_volcano.png", width = 9, height = 7)
graph2png(academic_volcano, "academic_volcano.png", width = 9, height = 7)
graph2png(gradient_volcano, "gradient_volcano.png", width = 10, height = 8)
graph2png(tilted_volcano, "tilted_volcano.png", width = 10, height = 8)

# 保存3D交互圖
htmlwidgets::saveWidget(
  widget = volcano3d,
  file = "3D_volcano.html",
  selfcontained = TRUE
)

# 10. 并排顯示2D圖形 ----
grid_volcano <- gridExtra::grid.arrange(
  basic_volcano, 
  modern_volcano,
  academic_volcano,
  gradient_volcano,
  tilted_volcano,
  ncol = 3,
  top = "Comparative Volcano Plots"
)

# 保存組合圖
graph2png(grid_volcano, "combined_volcano.png", width = 18, height = 12)

# 11. 在R中查看所有圖形 ----
# 顯示2D圖形
print(basic_volcano)
print(modern_volcano)
print(academic_volcano)
print(gradient_volcano)
print(tilted_volcano)

# 顯示3D圖形(在RStudio中查看)
# volcano3d

特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關(guān)推薦
熱點推薦
柬埔寨很安全!像陳志這樣的企業(yè)家,他們對國人掏心掏肺誠意十足

柬埔寨很安全!像陳志這樣的企業(yè)家,他們對國人掏心掏肺誠意十足

剛哥說法365
2025-11-13 22:50:12
世界最嚴重的工程錯誤,耗費巨資成爛賬,中國占倆,讓央媒都憤怒

世界最嚴重的工程錯誤,耗費巨資成爛賬,中國占倆,讓央媒都憤怒

娛樂圈見解說
2025-11-12 15:07:01
150萬創(chuàng)業(yè),36歲套現(xiàn)15億退場,摩拜創(chuàng)始人胡瑋煒現(xiàn)狀如何?

150萬創(chuàng)業(yè),36歲套現(xiàn)15億退場,摩拜創(chuàng)始人胡瑋煒現(xiàn)狀如何?

奇思妙想生活家
2025-11-13 06:53:04
沈伯洋現(xiàn)身德國,陸再發(fā)通緝令,臺稱集體脅迫,國臺辦:正義出擊

沈伯洋現(xiàn)身德國,陸再發(fā)通緝令,臺稱集體脅迫,國臺辦:正義出擊

薦史
2025-11-13 13:12:49
3300億瓦特!超上海紐約東京迪拜電量總和!美國核聚變又有突破?

3300億瓦特!超上海紐約東京迪拜電量總和!美國核聚變又有突破?

徐德文科學頻道
2025-11-13 21:41:00
歡迎來國家發(fā)改委吃早餐

歡迎來國家發(fā)改委吃早餐

新浪財經(jīng)
2025-11-12 20:31:47
特斯拉Model Y,憑什么成為全球最暢銷汽車?

特斯拉Model Y,憑什么成為全球最暢銷汽車?

車享壹號
2025-11-13 11:40:03
自從楊振寧走后,翁帆真的變了,她用20年被人嘲笑的愛情,給網(wǎng)友回了一記耳光

自從楊振寧走后,翁帆真的變了,她用20年被人嘲笑的愛情,給網(wǎng)友回了一記耳光

粵語音樂噴泉
2025-11-10 00:20:26
央視怒批,國務(wù)院點名封殺!這幾位蒙騙老百姓的大網(wǎng)紅,徹底涼涼

央視怒批,國務(wù)院點名封殺!這幾位蒙騙老百姓的大網(wǎng)紅,徹底涼涼

大魚簡科
2025-09-02 19:34:00
高市拒絕撤回謬論,不到48小時,中方深切哀悼,日本重要人物逝世

高市拒絕撤回謬論,不到48小時,中方深切哀悼,日本重要人物逝世

博覽歷史
2025-11-12 16:50:23
曾國藩的識人術(shù):飯桌上的這種人,切記不可深交,否則后患無窮

曾國藩的識人術(shù):飯桌上的這種人,切記不可深交,否則后患無窮

牛魔王與芭蕉扇
2025-11-11 10:16:23
廣州65歲男子冠脈造影手術(shù)順利,4小時死亡,醫(yī)生:犯了致命錯誤

廣州65歲男子冠脈造影手術(shù)順利,4小時死亡,醫(yī)生:犯了致命錯誤

荷蘭豆愛健康
2025-11-12 12:18:42
日專家:中日戰(zhàn)爭一旦爆發(fā),日將對中國軍艦發(fā)起三重打擊!

日專家:中日戰(zhàn)爭一旦爆發(fā),日將對中國軍艦發(fā)起三重打擊!

阿晪美食
2025-10-21 10:48:32
狂轟26分7板4助!打爆開拓者主力中鋒,楊瀚森的手下敗將徹底蛻變

狂轟26分7板4助!打爆開拓者主力中鋒,楊瀚森的手下敗將徹底蛻變

球場沒跑道
2025-11-13 11:57:52
中方:強烈譴責,對遇難者表示深切哀悼

中方:強烈譴責,對遇難者表示深切哀悼

政知新媒體
2025-11-12 15:48:01
鐵軌上的四川,40個“無鐵縣”的等待

鐵軌上的四川,40個“無鐵縣”的等待

金卡讀城
2025-11-12 23:50:54
毛新宇少將擔任副部長!妻子劉濱擔任扇子協(xié)會會長

毛新宇少將擔任副部長!妻子劉濱擔任扇子協(xié)會會長

李昕言溫度空間
2025-11-09 14:50:17
”經(jīng)濟學家吳曉求教授說:“老百姓都沒收入了,還在刺激消費!這種做法是錯誤的!

”經(jīng)濟學家吳曉求教授說:“老百姓都沒收入了,還在刺激消費!這種做法是錯誤的!

張曉磊
2025-11-07 11:34:05
川普逼宮BBC:10億美元律師函震碎英國左翼神話

川普逼宮BBC:10億美元律師函震碎英國左翼神話

斌聞天下
2025-11-13 07:35:03
理想設(shè)計總監(jiān)Ben:法拉利首款純電SUV外觀酷似i系列

理想設(shè)計總監(jiān)Ben:法拉利首款純電SUV外觀酷似i系列

手機中國
2025-11-13 16:42:13
2025-11-13 23:47:00
芒果師兄 incentive-icons
芒果師兄
一起學習,共同成長,讓生信助力科研。
399文章數(shù) 60關(guān)注度
往期回顧 全部

科技要聞

月產(chǎn)能突破百萬片,中芯國際Q3凈利增43.1%

頭條要聞

美方回應(yīng)高市早苗“臺灣有事”言論 中方表態(tài)

頭條要聞

美方回應(yīng)高市早苗“臺灣有事”言論 中方表態(tài)

體育要聞

跟豪門傳了十年緋聞,他卻偏要“擇一隊終老”

娛樂要聞

王鶴棣孟子義真要搭?

財經(jīng)要聞

源峰25億賭局!漢堡王中國"賣身"求生

汽車要聞

具備高階輔助駕駛功能 歐拉5預(yù)售價10.98萬起

態(tài)度原創(chuàng)

時尚
游戲
本地
藝術(shù)
家居

被掃地出門的貴公子,真是活該

跳票半年月多花六千萬美元?GTA6打磨品質(zhì)成本超高

本地新聞

云游安徽 | 江聲浩蕩閱千年,文脈相承看蕪湖

藝術(shù)要聞

黃君璧:仿古山水冊

家居要聞

莫奈時間 重構(gòu)先鋒概念

無障礙瀏覽 進入關(guān)懷版 亚洲熟妇精品一区二区| 亚洲色精品vr一区二区| 丁香五月花婷婷| 调教视频免费| 无码中出苍井そら50分钟| 丰满少妇高潮一区二区| 日韩欧美在线综合网| 性人久久久久| 百度亚洲视频| 大桥未久亚洲无av码在线| 亚洲成人性爱在线播放| 免费在线观看a视频| 99热成人在线| 国产精品_国产精品_k频道| 久久精品99国产精品亚洲| 成人网站一区二区| 午夜精品一区二区三区在线观看| 女人高潮久久久叫人喷水| 亚洲国产成人AⅤ毛片奶水| 综合亚洲网| 日本熟妇美熟bbw| 俺去俺来也在线WWW色官方| 亚洲精品无码久久久久去q| 国产农村在线国产视频| 精品久久久久久18禁免费网站| 亚洲精品乱码久久久久久蜜桃欧美| 亚洲电影一区二区| 日韩 一区二区在线观看| BBW与WB和老妇女| 亚洲日韩国产二区无码| avav天堂网| 素人视频亚洲十一十二区| 精品国精品自拍自在线| 国产sm调教折磨视频| 欧美黑人巨大videos| 九一传媒精品国产AV| 久久久久无码精品国产H动漫猫咪 国产精品久久久久久无码蜜臀漫画 | 丰满亚洲大尺度无码无码专线 | 久久久久无码精品国产699| 国产成人亚洲欧美二区综合| 操老熟女老女人|