barplot แบบเรียงซ้อนสำหรับการวิเคราะห์เซลล์เดี่ยว

ฉันกำลังพยายามพล็อต barplot แบบเรียงซ้อนด้วย ggplot2 ด้วยรหัสนี้

barplot <- ggplot() + geom_bar(aes(y = percentage, x = TBD, fill = TBD), data = charts.data, stat="identity")

ฉันต้องการสร้าง barplot สำหรับการวิเคราะห์เซลล์เดี่ยวของฉันซึ่งมี 2 เงื่อนไข คือ สภาวะที่ได้รับการรักษาและที่ไม่ได้รับการรักษา ฉันต้องการแสดงเปอร์เซ็นต์ของเซลล์ชนิดต่างๆ ต่อเงื่อนไขโดยใช้ barplot เพื่อดูว่าเซลล์ที่ได้รับการรักษาด้วยผลกระทบต่อเซลล์ชนิดต่างๆ หรือไม่

ฉันจะกำหนดเปอร์เซ็นต์ของเซลล์แต่ละประเภทในแต่ละเงื่อนไขได้อย่างไร จากนั้นจึงลงจุด barplot

เอาต์พุตของ dput(head(comparison))

structure(c(6051L, 1892L, 1133L, 893L, 148L, 868L, 5331L, 3757L, 
1802L, 1061L, 2786L, 704L), .Dim = c(6L, 2L), .Dimnames = structure(list(c("Fibroblast", "T cell", "Macrophage", "Stellate", "Acinar", "Endothelial"), c("treated", "untreated")), .Names = c("", 
"")), class = "table")

เอาต์พุตของ dput(head(cell_cycle_data))

structure(list(orig.ident = c("treated", "treated", "treated", 
    "treated", "treated", "treated"), nCount_RNA = c(1892, 307, 1348, 
    3699, 4205, 4468), nFeature_RNA = c(960L, 243L, 765L, 1612L, 
    1341L, 1644L), percent.mt = c(0.211416490486258, 1.62866449511401, 
    4.45103857566766, 4.4065963773993, 0.0713436385255648, 3.87197851387645
    ), RNA_snn_res.0.5 = structure(c(11L, 11L, 5L, 6L, 11L, 13L), .Label = c("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", 
    "13", "14", "15", "16", "17", "18", "19"), class = "factor"), seurat_clusters = structure(c(11L, 11L, 5L, 6L, 11L, 13L), .Label = c("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19"), class = "factor"), S.Score = c(0.476893835992198, -0.0200784617568548, -0.0335915198305002, -0.0247184276246385, 0.010785196602457, 0.0190008903712199), G2M.Score = c(0.204441469200986, 0.173804859670862, -0.0313235510969097, -0.0376796363661889, -0.0559526905696905, -0.0122031631356698), Phase = structure(c(3L, 2L, 1L, 1L, 3L, 3L), .Label = c("G1", "G2M", "S"), class = "factor"), old.ident = structure(c(7L,7L, 1L, 4L, 7L, 9L), .Label = c("Fibroblast", "T cell", "Macrophage", "Stellate", "Acinar", "Endothelial", "Tumor", "B cell", "Mast cell", "Ductal", "Islets of Langerhans"), class = "factor")), row.names = c("treated_AAACGCTAGCGGGTTA-1", "treated_AAAGGTAAGTACAGAT-1", "treated_AAAGTGAGTTTGATCG-1", "treated_AAATGGACAAAGTGTA-1", 
    "treated_AACAAAGGTCGACTTA-1", "treated_AACAGGGTCCTAGCCT-1"), class = "data.frame")

เอาต์พุตของ dput(tail(comparison))

structure(list(orig.ident = c("untreated", "untreated", "untreated", 
"untreated", "untreated", "untreated"), nCount_RNA = c(901, 823, 
1184, 1835, 1147, 1407), nFeature_RNA = c(482L, 479L, 649L, 1043L, 
604L, 709L), percent.mt = c(1.77580466148724, 2.91616038882138, 
4.22297297297297, 3.86920980926431, 2.0052310374891, 4.05117270788913
), RNA_snn_res.0.5 = structure(c(7L, 7L, 7L, 14L, 7L, 7L), .Label = c("0", 
"1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", 
"13", "14", "15", "16", "17", "18", "19"), class = "factor"), 
    seurat_clusters = structure(c(7L, 7L, 7L, 14L, 7L, 7L), .Label = c("0", 
    "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", 
    "12", "13", "14", "15", "16", "17", "18", "19"), class = "factor"), 
    S.Score = c(-0.0320858200243315, 0.0304725660342869, 0.0215996091745327, 
    0.0384166213301423, 0.144956251122548, -0.0242770509986111
    ), G2M.Score = c(0.0904224391544142, 0.050148242050667, -0.0178041670730754, 
    -0.0112596867977946, -0.0519554524339088, -0.0136533184257381
    ), Phase = structure(c(2L, 2L, 3L, 3L, 3L, 1L), .Label = c("G1", 
    "G2M", "S"), class = "factor"), old.ident = structure(c(5L, 
    5L, 5L, 5L, 5L, 5L), .Label = c("Fibroblast", "T cell", "Macrophage", 
    "Stellate", "Acinar", "Endothelial", "Tumor", "B cell", "Mast cell", 
    "Ductal", "Islets of Langerhans"), class = "factor")), row.names = c("untreated_TTTGGTTGTCTAATCG-18", 
"untreated_TTTGGTTTCCCGAGGT-18", "untreated_TTTGTTGAGAACTGAT-18", 
"untreated_TTTGTTGAGCTCGGCT-18", "untreated_TTTGTTGAGTGCCTCG-18", 
"untreated_TTTGTTGCACGGTGCT-18"), class = "data.frame")

person Michelle    schedule 11.01.2020    source แหล่งที่มา
comment
การตอบคำถามของคุณจะง่ายกว่า หากคุณให้ตัวอย่างที่ทำซ้ำได้ว่าข้อมูลของคุณมีลักษณะอย่างไร โปรดดู: stackoverflow. com/questions/5963269/   -  person dc37    schedule 12.01.2020
comment
ฉันไม่มีข้อมูลที่จะแสดงมากนักนอกจากรายการยีนซึ่งไม่ได้จำแนกตามประเภทเซลล์   -  person Michelle    schedule 12.01.2020
comment
แต่คุณต้องการพล็อตของคุณอย่างไร หากคุณไม่ทราบประเภทและเงื่อนไขของเซลล์   -  person dc37    schedule 12.01.2020
comment
สภาพของฉันได้รับการรักษาและไม่ได้รับการรักษา ฉันมียีนและได้จำแนกประเภทเซลล์ที่สำคัญแล้ว แต่ไม่ได้จำแนกยีนทุกยีน ไม่รู้จะกำหนดเปอร์เซ็นต์ของแต่ละคนยังไง   -  person Michelle    schedule 12.01.2020
comment
คุณมีรายชื่อยีนและประเภทเซลล์ที่เกี่ยวข้องบ้างไหม? คุณควรยกตัวอย่างนี้เพื่อให้เราเข้าใจว่าผลลัพธ์ของคุณเป็นอย่างไรในสภาพที่ได้รับการบำบัดและไม่ได้รับการรักษา   -  person dc37    schedule 12.01.2020
comment
ใช่ แต่สำหรับเครื่องหมายบนสุดที่ฉันพบเท่านั้น   -  person Michelle    schedule 12.01.2020
comment
ขออภัย ยังขาดข้อมูลจำนวนมากที่สามารถช่วยคุณได้ หากคุณสามารถค้นหาวิธีแบ่งปันคำจำกัดความของเซลล์อย่างน้อยสองประเภท รวมถึงผลลัพธ์ของการวิเคราะห์เซลล์เดี่ยวของคุณสำหรับการรักษาและสภาวะที่ไม่ได้รับการรักษา บางทีเราอาจช่วยคุณได้   -  person dc37    schedule 12.01.2020
comment
ฉันเดาว่าคำถามของฉันคือ ฉันจะกำหนดเปอร์เซ็นต์ได้อย่างไร สำหรับแต่ละเงื่อนไข ประเภทเซลล์เดียวกันทั้งหมดจะปรากฏขึ้น แต่ขึ้นอยู่กับเงื่อนไข จะแตกต่างกันไปตามขนาดของคลัสเตอร์   -  person Michelle    schedule 12.01.2020
comment
จากข้อมูลของคุณ คลัสเตอร์1,2,3 ... ใดสอดคล้องกัน ชื่อฟีเจอร์ใดที่ตรงกัน? คุณกำหนดได้อย่างไรว่านี่คือ macrophage คลัสเตอร์   -  person dc37    schedule 15.01.2020
comment
ภายในเบราว์เซอร์ Loupe สำหรับการวิเคราะห์เซลล์เดียว ฉันวิเคราะห์คลัสเตอร์มาโครฟาจใหม่จากผลรวม ฉันใช้เครื่องหมายที่รู้จักเพื่อระบุคลัสเตอร์นั้นเป็นมาโครฟาจ รายชื่อยีนที่ได้รับการควบคุมจะดีกว่าไหม   -  person Michelle    schedule 15.01.2020
comment
มันไม่ได้ช่วยให้เข้าใจว่าคลัสเตอร์ 1 / คลัสเตอร์ 2 / คลัสเตอร์ 3 คืออะไร, คุณลักษณะ.id และคุณลักษณะ.ชื่อ คุณสามารถกำหนดสิ่งเหล่านั้นได้หรือไม่?   -  person dc37    schedule 15.01.2020
comment
เมื่อฉันวิเคราะห์คลัสเตอร์อีกครั้ง คลัสเตอร์จะสร้างการรวมด้วยจำนวนคลัสเตอร์ที่แตกต่างกัน ซึ่งแต่ละคลัสเตอร์กำหนดไว้ในแผ่นงาน Excel ชื่อคุณลักษณะคือชื่อยีนและรหัสคุณลักษณะสามารถละเว้นได้   -  person Michelle    schedule 15.01.2020
comment
โดยพื้นฐานแล้วสำหรับแต่ละชื่อยีน มันเชื่อมโยงค่า logFC และ pvalue ขึ้นอยู่กับคลัสเตอร์ ใช่ไหม ตัวอย่างเช่น คลัสเตอร์ 1 จะเป็นคลัสเตอร์มาโครฟาจ อย่างไรก็ตาม เพื่อตอบคำถามของคุณ โปรแกรมของคุณจะไม่ส่งคืนจำนวนเซลล์ในแต่ละคลัสเตอร์ ดังนั้นฉันจึงไม่เห็นว่าคุณจะได้เปอร์เซ็นต์ที่คุณต้องการได้อย่างไร   -  person dc37    schedule 15.01.2020
comment
ถูกต้อง แต่ไฟล์ทั้งหมดนั้นมีไว้สำหรับคลัสเตอร์มาโครฟาจ และไม่เป็นเช่นนั้น แต่มีวิธีที่จะทำกราฟแท่งแบบเรียงซ้อนเป็นไฟล์นั้นหรือไม่?   -  person Michelle    schedule 15.01.2020
comment
ตกลง โดยพื้นฐานแล้วคุณมีไฟล์ที่คล้ายกันหนึ่งไฟล์สำหรับแต่ละคลัสเตอร์หลักใช่ไหม ในกรณีนั้นหมายความว่าแต่ละคอลัมน์คลัสเตอร์1,คลัสเตอร์2ของคลัสเตอร์มาโครฟาจคือเซลล์1,เซลล์2ของคลัสเตอร์นี้หรือไม่   -  person dc37    schedule 15.01.2020
comment
เซลล์1,เซลล์2คุณหมายถึงอะไร?   -  person Michelle    schedule 15.01.2020
comment
หากตัวอย่างของคุณ มี 4 คลัสเตอร์ที่กำหนดไว้ในไฟล์คลัสเตอร์มาโครฟาจ พวกเขากำหนดคลัสเตอร์ในคลัสเตอร์มาโครฟาจหรือไม่? หรือเซลล์เดียวในคลัสเตอร์มาโครฟาจ ?   -  person dc37    schedule 15.01.2020
comment
คลัสเตอร์ภายในคลัสเตอร์มาโครฟาจ   -  person Michelle    schedule 15.01.2020
comment
ฉันเข้าใจแล้ว ฉันเกรงว่าจากไฟล์นี้ คุณจะไม่มีทางทราบจำนวนเซลล์ในแต่ละคลัสเตอร์หรือคลัสเตอร์ย่อย ฉันคิดว่าคุณต้องดูพารามิเตอร์ของเบราว์เซอร์ Loupe เพื่อวิเคราะห์เซลล์เดี่ยวเพื่อดูว่าคุณจะได้ตัวเลขเหล่านี้หรือไม่ ขอโทษ   -  person dc37    schedule 15.01.2020


คำตอบ (1)


หากไม่ทราบโครงสร้างข้อมูลของคุณ เป็นเรื่องยากมากที่จะคาดเดาว่าโค้ดใดจะเป็นโค้ดที่ดีสำหรับตัวอย่างของคุณ

อย่างไรก็ตาม ถ้าเราถือว่าคุณมีสำหรับแต่ละเงื่อนไข คุณจะมีรายการเซลล์แต่ละเซลล์ โดยแต่ละเซลล์จะมีป้ายกำกับเฉพาะที่สอดคล้องกับประเภทเซลล์ ดังตัวอย่างต่อไปนี้:

set.seed(123)
Untreated <- data.frame(Cell_Type = sample(LETTERS[1:4],10, replace = TRUE))
Treated <- data.frame(Cell_Type =sample(LETTERS[1:4],25, replace = TRUE))

  Cell_Type
1         C
2         C
3         C
4         B
5         C
6         B
...       ...

คุณสามารถใช้ dplyr ไปที่ bind_rows ก่อน:

library(dplyr)
Untreated <- Untreated %>% mutate(Condition = "Untreated")
Treated <- Treated %>% mutate(Condition = "Treated")
DF <- bind_rows(Untreated, Treated)

  Cell_Type Condition
1         C Untreated
2         C Untreated
3         C Untreated
4         B Untreated
5         C Untreated
6         B Untreated

จากนั้น คุณสามารถนับจำนวนเซลล์แต่ละประเภทในแต่ละเงื่อนไขและแสดงเป็นเปอร์เซ็นต์ได้:

DF <- DF %>% group_by(Condition, Cell_Type) %>% 
  summarise(Nb = n()) %>%
  mutate(C = sum(Nb)) %>%
  mutate(percent = Nb/C*100)

# A tibble: 7 x 5
# Groups:   Condition [2]
  Condition Cell_Type    Nb     C percent
  <chr>     <chr>     <int> <int>   <dbl>
1 Treated   A             7    25     28.
2 Treated   B             7    25     28.
3 Treated   C             6    25     24 
4 Treated   D             5    25     20 
5 Untreated A             1    10     10 
6 Untreated B             4    10     40 
7 Untreated C             5    10     50 

จากนั้น คุณสามารถพล็อตผลลัพธ์เป็นแผนภูมิแท่งแบบเรียงซ้อนสำหรับแต่ละเงื่อนไข และเติมแต่ละสีตาม Cell_Type:

library(ggplot2)
ggplot(DF, aes(x = Condition, y = percent, fill = Cell_Type))+
  geom_bar(stat = "identity")+
  geom_text(aes(label = paste(percent,"%")), position = position_stack(vjust = 0.5))

ป้อนคำอธิบายรูปภาพที่นี่

แก้ไข: การวางแผนโดยใช้ข้อมูลที่ได้รับจาก OP

คุณสามารถทำสิ่งต่อไปนี้ได้โดยใช้ข้อมูลที่คุณให้ไว้ในคำถาม

df <- structure(c(6051L, 1892L, 1133L, 893L, 148L, 868L, 5331L, 3757L, 
            1802L, 1061L, 2786L, 704L), .Dim = c(6L, 2L), .Dimnames = structure(list(c("Fibroblast", "T cell", "Macrophage", "Stellate", "Acinar", "Endothelial"), c("treated", "untreated")), .Names = c("", 
                                                                                                                                                                                                          "")), class = "table")
df <- data.frame(df)

ซึ่งให้ dataframe ต่อไปนี้:

          Var1      Var2 Freq
1   Fibroblast   treated 6051
2       T cell   treated 1892
3   Macrophage   treated 1133
4     Stellate   treated  893
5       Acinar   treated  148
6  Endothelial   treated  868
7   Fibroblast untreated 5331
8       T cell untreated 3757
9   Macrophage untreated 1802
10    Stellate untreated 1061
11      Acinar untreated 2786
12 Endothelial untreated  704

จากนั้น คุณสามารถเปลี่ยนชื่อคอลัมน์ของคุณ คำนวณเปอร์เซ็นต์ของเซลล์แต่ละประเภทสำหรับแต่ละเงื่อนไขได้:

library(dplyr)
DF <- df %>% rename(Cell_Type = Var1, Condition = Var2) %>%
  group_by(Condition) %>% 
  mutate(Percent = Freq / sum(Freq)*100)

# A tibble: 12 x 4
# Groups:   Condition [2]
   Cell_Type   Condition  Freq Percent
   <fct>       <fct>     <int>   <dbl>
 1 Fibroblast  treated    6051   55.1 
 2 T cell      treated    1892   17.2 
 3 Macrophage  treated    1133   10.3 
 4 Stellate    treated     893    8.13
 5 Acinar      treated     148    1.35
 6 Endothelial treated     868    7.90
 7 Fibroblast  untreated  5331   34.5 
 8 T cell      untreated  3757   24.3 
 9 Macrophage  untreated  1802   11.7 
10 Stellate    untreated  1061    6.87
11 Acinar      untreated  2786   18.0 
12 Endothelial untreated   704    4.56

จากนั้นในส่วนของการวางแผน:

library(ggplot2)
ggplot(DF, aes(x = Condition, y = Percent, fill = Cell_Type))+
  geom_bar(stat = "identity")+
  geom_text(aes(label = paste(round(Percent,2),"%")), position = position_stack(vjust =  0.5))

ป้อนคำอธิบายรูปภาพที่นี่

มันตอบคำถามของคุณหรือไม่?

person dc37    schedule 12.01.2020
comment
ฉันมีไฟล์นิพจน์ดิฟเฟอเรนเชียลสำหรับแต่ละเงื่อนไขสำหรับเซลล์แต่ละประเภท ซึ่งจะใช้เป็นอินพุตได้หรือไม่ - person Michelle; 14.01.2020
comment
ไม่ คุณจะต้องเข้าร่วมไฟล์เหล่านี้ก่อน ขออภัย หากไม่แสดงตัวอย่างเล็กๆ น้อยๆ ของไฟล์เหล่านี้ ฉันไม่สามารถแนะนำคุณได้ - person dc37; 14.01.2020
comment
บางทีคุณอาจโพสต์บรรทัดแรกของไฟล์นิพจน์ส่วนต่างที่ได้รับสำหรับแต่ละเงื่อนไขสำหรับเซลล์ประเภทเดียวได้ (ใช้ dput(head(df)) เพื่อสร้างตัวอย่าง) - person dc37; 14.01.2020
comment
ฉันเพิ่มไฟล์นิพจน์ดิฟเฟอเรนเชียลสำหรับคลัสเตอร์มาโครฟาจสำหรับที่ไม่ได้รับการรักษาและบำบัด - person Michelle; 15.01.2020
comment
ภายใน Seurat ฉันสามารถหาเปอร์เซ็นต์สำหรับแต่ละคลัสเตอร์ได้ และเงื่อนไขคือ คุณรู้วิธีส่งออกไฟล์นั้นแล้วจึงทำกราฟแท่งแบบซ้อนหรือไม่ - person Michelle; 16.01.2020
comment
ฉันไม่เคยใช้สุราษฎร์ บางทีคุณอาจส่งออกเป็นไฟล์ csv หรือ txt ได้ หากเป็นเช่นนั้น คุณสามารถโหลดลงใน R และระบุส่วนเล็กๆ ของไฟล์นี้ในคำถามของคุณ จากนั้น เราควรจะแนะนำคุณเกี่ยวกับกราฟแท่งแบบเรียงซ้อนได้ - person dc37; 16.01.2020
comment
ฉันได้อัปเดตคำถามของฉันด้วยส่วนหนึ่งของไฟล์ - person Michelle; 20.01.2020
comment
ใช่แล้ว. ตอนนี้ฉันต้องการสร้างกราฟแท่งแบบเรียงซ้อนอีกอันหนึ่ง แต่มีวัฏจักรเซลล์ที่แตกต่างกันสำหรับเซลล์แต่ละประเภทภายในประเภทเซลล์ ฉันได้อัพโหลดไฟล์สำหรับมันแล้ว ไม่รู้จะทำยังไงเพราะตอนนี้มีภาวะอื่น (วงจรเซลล์) ฉันสามารถทำกราฟแท่งเปรียบเทียบวัฏจักรของเซลล์ต่อสภาวะได้ แต่ตอนนี้ฉันต้องการเปรียบเทียบชนิดเซลล์และวัฏจักรของเซลล์ในแต่ละสภาวะ - person Michelle; 21.01.2020
comment
ไม่รู้ว่าจำเป็นต้องใช้ data frame เพิ่มเติมหรือเปล่า เพราะฉันทำแค่ส่วนหัวเท่านั้น - person Michelle; 21.01.2020
comment
หากคุณรู้สึกว่าคำตอบนี้ตอบคำถามของคุณ คุณควรดูที่นี่: stackoverflow.com/help/someone-answers สำหรับคำถามที่สองของคุณในความคิดเห็น ฉันคิดว่าคุณควรพยายามถามคำถามใหม่หรือถามคำถามนี้กับชุมชนของ bioinformatics.stackexchange.com เนื่องจากดูเหมือนแตกต่างไปมากเนื่องจากไฟล์อัปเดตใหม่ของคุณไม่ได้คำนึงถึงจำนวน cell types ดังนั้นฉันจึงไม่ชัดเจนสำหรับฉันว่าคุณกำลังวางแผนอะไร ฉันเดาว่าบางทีคุณอาจต้องใช้ facet_wrap มีโพสต์มากมายที่อธิบายการใช้งานบน SO - person dc37; 21.01.2020
comment
นอกจากนี้ การแลกเปลี่ยนความคิดเห็นกันเป็นเวลานานนั้นไม่เป็นที่ต้องการนัก เนื่องจากมีแนวโน้มที่จะทำให้การอ่านเป็นเรื่องยากสำหรับผู้เยี่ยมชมที่กำลังมองหาวิธีแก้ไขปัญหาที่คล้ายกัน - person dc37; 21.01.2020
comment
ฉันโพสต์ส่วนท้ายของกรอบข้อมูล - person Michelle; 21.01.2020