일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Batch effect
- python matplotlib
- drug muggers
- CUTandRUN
- PYTHON
- javascript
- js
- matplotlib
- julia
- Bioinformatics
- ngs
- ChIPseq
- 비타민 C
- CUT&RUN
- cellranger
- Git
- CSS
- drug development
- HTML
- single cell analysis
- scRNAseq
- github
- MACS2
- scRNAseq analysis
- EdgeR
- single cell rnaseq
- 싱글셀 분석
- DataFrame
- single cell
- pandas
- Today
- Total
바이오 대표
[ R 시각화 ] R 언어로 그리는 이쁜 히트맵 (Heatmap) - complexHeatmap 본문
데이터를 시각화 하는 것은 의미 있는 해석을 하기 위해 중요한 단계입니다. 해당 글에서는 R 언어을 이용해서 히트맵을 그리는 다양한 패키지 중 (pheatmap, ggplot, complexheatmap) 중 파라미터들를 이용해서 이쁘게 그릴 수 있는 complexheatmap()에 관하여 알아보겠습니다.
ComplexHeatmap
heatmap을 그릴 때, 필요한 요소는 matrix 입니다. 하지만 좀 더 이쁜 그림을 위해 다음과 같은 요소들을 사용할 수 있습니다.
- 필수! matrix (ex. gene vs sample counts)
- 선택 color heat_colors colorRamp2
- 선택 column annotation colanno HeatmapAnnotation
- 선택 row annotation
matrix 예시
# as.matrix(mat) = TMMCPM_Log2
sample1 sample2 sample3 sample4 sample5
PF3D7_0304600: CSP 0.000000 1.709882 0.000000 3.767100 3.404102
PF3D7_1401700 0.000000 4.321385 0.000000 0.000000 2.279087
PF3D7_0310400: PIESP1 6.617115 8.079529 6.273362 7.844357 8.234118
PF3D7_0401600: RIF 6.957386 4.496372 0.000000 5.994415 5.862712
PF3D7_0608100 0.000000 0.000000 0.000000 0.000000 2.771813
PF3D7_1222300: GRP94 10.072327 10.470409 9.621971 10.036639 10.244119
PF3D7_1448400: HRD3 0.000000 0.000000 0.000000 4.578547 5.612952
...
# 요소 설정
heat_colors <- circlize::colorRamp2(breaks=c(0,1,3,6,9,12), colors = viridis::turbo(6))
colanno <- data %>%
select(time_point) %>% # 그룹핑하고 싶은 column 선택
HeatmapAnnotation(df = ., which = "column",
col = list(time_point=ggpubr::get_palette(c("#EFC000FF", "#868686FF", "#CD534CFF"), 3) %>%
purrr::set_names(unique(manifest_456$time_point))))
Heatmap(**matrix** = as.matrix(data),
**col** = heat_colors, # colorRamp2
**name** = "log2 TPM",
**top_annotation** = colanno, # HeatmapAnnotation
**show_column_names** = TRUE,
**row_title_gp** = gpar(fontsize = 6),
**column_names_gp** = gpar(fontsize=10),
**row_names_gp** = gpar(fontsize = 10))
Manifest 예시
sample_id_cat RNA_label infection_status time_point analysis_group
1 sample1 L1Pf4 Infected Day4 Day4_Heps_Pf+
2 sample2 L2Pf4 Infected Day4 Day4_Heps_Pf+
colorRamp2
해당 기능은 circlize 패키지에 속하며, 연속적인 색을 커스텀해서 만들어내고 싶을 때 사용가능합니다. 위의 예시, circlize::colorRamp2(breaks=c(0,1,3,6,9,12), colors = viridis::turbo(6))에서 사용되는 색은 ‘viridis’ 패키지에서 만든 팔레트중 레인보우칼러텀인 turbo입니다. 이는 color-blind friendly 로, 색약을 갖고있는 사람들도 쉽게 구분을 할 수 있도록 만들어졌습니다. colors = viridis::turbo(6)) 코드는 turbo의 6개 색을 이용해서 연속적인 색을 만들어줍니다. breaks=c(0,1,3,6,9,12) 은 앞에서 정한 6개의 색을 내 데이터의 특정 구역에 적용을 할 수 있도록 하는 파라미터입니다. 예를 들어 내 데이터가 0 에서 15까지의 수치사이에 있다면, 위와 같이 0, 1, 3, 6, 9, 12 일때 변화를 주어 색을 칠하게 합니다. 팔레트 설명 circlize::colorRamp2 로 만든 색을 프린트 해보면, 다음과 같이 함수와 색, 투명도 와 같은 값을 저장합니다.
function (x = NULL, return_rgb = FALSE, max_value = 1)
{
생략
}
<bytecode: 0x55a23656d5a0>
<environment: 0x55a26db9e8f8>
attr(,"breaks")
[1] 0 1 3 6 9 12
attr(,"colors")
[1] "#30123BFF" "#3E9BFEFF" "#46F884FF" "#E1DD37FF" "#F05B12FF"
[6] "#7A0403FF"
attr(,"transparency")
[1] 0
attr(,"space")
[1] "LAB"
만약 만든 팔레트를 시각화 하고싶다면 다음과 같이 실행 할 수 있습니다.
library(circlize)
draw_colorRamp2 <- function(breaks, colors){
# create the color ramp
color_ramp <- circlize::colorRamp2(breaks, colors)
# number of rectangles to draw
num_rectangles <- 100
# generate values ranging from the minimum to the maximum break value
data_values <- seq(min(breaks), max(breaks), length.out = num_rectangles)
# the width of each rectangle
rect_width <- 1
# set up the plotting area
plot(0, 0, xlim = c(0, num_rectangles), ylim = c(0, 1),
type = "n", xlab = "", ylab = "", xaxt = "n", yaxt = "n")
# draw rectangles with colors from the color ramp
for (i in 1:num_rectangles) {
rect(i - 1, 0, i, 1, col = color_ramp(data_values[i]), border = NA)
}
# Add color legend
legend("topright", legend = breaks, fill = colors, title = "Values", cex = 0.8)
}
# exampl_1
breaks <- c(-2, 0, 2)
colors <- c("green", "white", "red")
draw_colorRamp2(breaks=breaks, colors = colors)
# example_2
draw_colorRamp2(breaks=c(0,1,3,6,9,12), colors = viridis::turbo(6))
HeatmapAnnotation
Complexheatmap의 HeatmapAnnotation() 함수를 이용해서 특정 샘플이나 컬럼을 clusering 하고, 레이블을 할 수 있습니다. 아래의 예시에서 위쪽에 노랑, 회색, 빨간색으로 다른 그룹을 표시한 것을 확인 할 수 있습니다. 해당 색의 레이블은 피켜의 오른쪽 레이블을 통해서 확인 할 수 있습니다.
colanno <- matrix %>%
select(time_point) %>%
HeatmapAnnotation(df = ., which = "column",
col = list(time_point=ggpubr::get_palette(c("#EFC000FF", "#868686FF", "#CD534CFF"), 3) %>%
purrr::set_names(unique(manifest_456$time_point))))
'R' 카테고리의 다른 글
[R function 익히기 1] grepl(패턴, x) : 문자열 패턴 매칭 함수 (2) | 2023.03.18 |
---|---|
[R - 기본기] "dplyr" 을 이용한 Data transformation (0) | 2023.01.10 |