Post

Cell type proportion 변화를 표현하는 방법

box plot

지난번에는 찾은 cell type의 비율을 bar plot, pie char로 정리하는 코드를 작성했었는데

👉 cell type proportion barplot으로 표현하기 포스트

👉 cell type proportion pie chart로 표현하기 포스트

이번에는 cluster별로, condition별로 cell type proportion을 box plot으로 그리고 sample별로 box사이에 line을 이어 그 변화의 흐름을 한눈에 정리해보자.

예시 데이터

이전에도 썼던 같은 데이터, cell type annotation까지 마친 상태.

하나의 데이터처럼 보이지만, 사실 4명의 다른 환자에서 infected 직후와 recovery 이후에 얻은, 총 8개의 샘플을 합친 결과이다.

샘플별로 cell type proportion을 구하고, infected ⇨ recovery 로 condition변화에 따라 proportion이 어떻게 변화하는지 box plot으로 표현해보자.

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
library(ggplot2)

## load the data
GEX.seurOBJ <-readRDS("GEX.seurOBJ.labeled.rds")
# create a dataset
ncluster = length(levels(GEX.seurOBJ$RNA_snn_res.0.8))
Patient <- rep(c('P01','P02','P03','P04'),each=2*ncluster)
Condition <- rep(c("Infec","Recovery"), each=ncluster)
cluster <- levels(GEX.seurOBJ$RNA_snn_res.0.8)

data <- data.frame(Patient,Condition,cluster)

Patient <- rep("Ctrl",2*ncluster)
Condition <- rep(c("PreVacc","PostVacc"), each=ncluster)
data <- rbind(data,data.frame(Patient,Condition,cluster))

data$value <- 0
data$percent <- 0

# cell type proportion 
for(k in levels(GEX.seurOBJ$PatientID_re)){
  Psub <- subset(GEX.seurOBJ, subset=PatientID_re==k)
  if(k=="Ctrl"){
      cond_list <- c("PreVacc","PostVacc")
    }else{
      cond_list <- c("Infec","Recovery")
    }
  for(i in cond_list){
    Csub <- subset(Psub, subset=Condition==i)
    total <- ncol(Csub)
    for(j in levels(GEX.seurOBJ$RNA_snn_res.0.8)){
      data[data$Patient==k & data$Condition==i & data$cluster==j,"value"] <- table(Csub$RNA_snn_res.0.8)[j]
      data[data$Patient==k & data$Condition==i & data$cluster==j,"percent"] <- data[data$Patient==k & data$Condition==i & data$cluster==j,"value"]/total
    }}}

#write.table(data, "ClusterCounts_by_sample.txt", sep='\t')

# Box plot with line

Infec.data <- data[data$Condition%in%c("Infec","Recovery"),]
Vacc.data <- data[data$Condition%in%c("PreVacc","PostVacc"),]

for(i in unique(Infec.data$cluster)){
  ggplot(Infec.data[Infec.data$cluster==i,], aes(Condition, percent, fill=Condition)) +
  geom_boxplot()+ geom_point()+ geom_line(aes(group=Patient, col=Patient)) +
  labs(title = i,size = 30, face = "bold") +theme_classic()  + theme(legend.position="none")
  ggsave(paste0("proportion_Infec_cluster",i,".png"),width=2,height=4)
}

for(i in unique(Vacc.data$cluster)){
  ggplot(Vacc.data[Vacc.data$cluster==i,], aes(Condition, percent, fill=Condition)) +
  geom_boxplot()+ geom_point()+ geom_line(aes(group=Patient, col=Patient)) +
  labs(title = i,size = 30, face = "bold") +theme_classic()  + theme(legend.position="none")
  ggsave(paste0("proportion_Vacc_cluster",i,".png"),width=2,height=4)
}

results

This post is licensed under CC BY 4.0 by the author.

© Subin Cho. Some rights reserved.

Using the Chirpy theme for Jekyll.