본문 바로가기
연구/BI

[R] volcano plot 그리기

by 짇든 2025. 9. 3.
728x90
반응형

1. Package 설치

install.packages(c("tidyverse", "RColorBrewer", "ggrepel"))

 

2. Library 실행

library(tidyverse) 
library(RColorBrewer) 
library(ggrepel)

- tidyverse: ggplot2를 포함하며 data visualization, manipulation을 위한 라이브러리

- RColorBrewer: 색깔 변경을 위해 사용하는 라이브러리

- ggrepel: annotations을 위해 사용하는 라이브러리

 

3. 경로 설정

setwd("C:/Users/Desktop/주소")
getwd()

- setwd("~")에 변경할 주소를 넣는다. 이 위치에 data.csv 파일이 들어있어야 함.

- getwd()로 변경이 잘 되었는지 현재 주소를 확인.

 

4. 데이터 불러오기

df <- read.csv("data.csv", header = TRUE, row.names = 1)

 

- 사용할 데이터가 담긴 csv 파일을 불러온다.

- 해당 데이터 파일은 첫번째 row가 Name, log2FoldChange, pvalue여서 header와 row.names를 설정함.

 

5. diffexpressed column 추가

df$diffexpressed <- "NO"  # 기본값 "NO"
df$diffexpressed[df$log2FoldChange > 0.5 & df$pvalue < 0.05] <- "UP"
df$diffexpressed[df$log2FoldChange < -0.5 & df$pvalue < 0.05] <- "DOWN"

 

- 데이터프레임에 새로운 column을 추가하고 기본 값을 모두 "NO"로 추가한다.

- log2FoldChange와 pvalue 기준을 설정한 뒤 각각을 "UP:과 "DOWN"으로 재지정한다.

 

6. Volcano plot 그리기

ggplot(data = df, aes(x = log2FoldChange, y = -log10(pvalue), color = diffexpressed)) +
  geom_vline(xintercept = c(-0.5, 0.5), color = "gray", linetype = "dashed") +
  geom_hline(yintercept = -log10(0.05), color = "gray", linetype = "dashed") +
  geom_point(size = 2) +
  scale_color_manual(values = c("DOWN" = "#00A", "NO" = "grey", "UP" = "red"),
                     labels = c("Downregulated", "Not significant", "Upregulated")) +
  ggtitle("Protein expression") +
  theme_minimal() +
  theme(plot.title = element_text(hjust = 0.5))

 

- aes: aesthetic mapping 정의

- aes(x = x축, y = y축): 그래프의 x축과 y축에 들어갈 데이터 지정

- geom_vline, geom_hline: fold change threshold를 그래프에 표현하기 위한 축을 설정

- 위 코드에서는 fold change가 1.5배 이상, p-value가 0.05 이하인 threshold를 표시함.

- 그래프에 제목을 추가하기 위해 ggtitle("제목")을 사용함

 

 

기본 -> threshold 설정 -> 색깔 설정 적용

 

 

7. Dot에 symbol 표기하기

df$gene_symbol <- rownames(df)
df$delabel <- ifelse(df$gene_symbol %in% head(df[order(df$pvalue), "gene_symbol"], 60), df$gene_symbol, NA)

 

- 하다 말았음

- 각 도트별로 이름이 표기되는데 깔끔하게 보는 걸 찾다가 말았음..

 

728x90
반응형