Barplot bertumpuk untuk analisis sel tunggal

Saya mencoba memplot barplot bertumpuk dengan ggplot2 dengan kode ini

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

Saya ingin membuat barplot untuk analisis sel tunggal saya yang memiliki 2 kondisi, kondisi yang diberi perlakuan dan kondisi yang tidak diberi perlakuan. Saya ingin menunjukkan dengan barplot, persentase jenis sel yang berbeda per kondisi untuk melihat apakah perlakuan yang diberikan berpengaruh pada jenis sel yang berbeda.

Bagaimana cara menentukan persentase setiap jenis sel di setiap kondisi dan kemudian membuat plot barplot?

keluaran 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")

keluaran 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")

keluaran 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 sumber
comment
Akan lebih mudah menjawab pertanyaan Anda jika Anda memberikan contoh yang dapat direproduksi tentang seperti apa data Anda. lihat: stackoverflow. com/questions/5963269/   -  person dc37    schedule 12.01.2020
comment
Saya tidak punya banyak data untuk ditampilkan selain daftar gen, yang tidak dicirikan oleh tipe sel.   -  person Michelle    schedule 12.01.2020
comment
Tetapi bagaimana Anda ingin mendapatkan plot Anda, jika Anda tidak mengetahui jenis dan kondisi sel?   -  person dc37    schedule 12.01.2020
comment
Kondisi saya diobati dan tidak diobati. Saya memiliki gen dan saya telah mengklasifikasikan tipe sel utama tetapi tidak setiap gen diklasifikasikan. Saya tidak tahu bagaimana menentukan persentase masing-masing.   -  person Michelle    schedule 12.01.2020
comment
Jadi, Anda punya daftar gen dan tipe sel terkait? Anda harus memberikan ini sebagai contoh agar kami memahami keluaran Anda dalam kondisi yang diberi perlakuan dan tidak   -  person dc37    schedule 12.01.2020
comment
Ya, tapi hanya untuk penanda teratas yang saya temukan.   -  person Michelle    schedule 12.01.2020
comment
Maaf, masih banyak informasi yang kurang untuk dapat membantu Anda. Jika Anda dapat menemukan cara untuk membagikan definisi setidaknya dua jenis sel serta keluaran analisis sel tunggal Anda untuk kondisi yang diobati dan tidak diobati, mungkin kami dapat membantu Anda dalam hal tersebut.   -  person dc37    schedule 12.01.2020
comment
Saya kira pertanyaan saya adalah, bagaimana cara menentukan persentasenya? Untuk setiap kondisi, semua jenis sel yang sama muncul, namun bergantung pada kondisi, bervariasi berdasarkan ukuran cluster.   -  person Michelle    schedule 12.01.2020
comment
Berdasarkan data Anda, cluster1,2,3 ... apa yang sesuai? nama fitur apa yang sesuai? Bagaimana Anda mendefinisikan bahwa ini adalah macrophage cluster ?   -  person dc37    schedule 15.01.2020
comment
Dalam browser pembesar untuk analisis sel tunggal, saya menganalisis ulang cluster makrofag dari agregat. Saya menggunakan penanda yang dikenal untuk mengidentifikasi cluster itu sebagai makrofag. Apakah daftar gen yang diatur lebih baik?   -  person Michelle    schedule 15.01.2020
comment
Tidak ada gunanya memahami apa itu cluster 1/cluster 2/cluster 3, feature.id, dan feature.name. Bisakah Anda mendefinisikannya?   -  person dc37    schedule 15.01.2020
comment
Ketika saya menganalisis ulang cluster, itu menghasilkan agregat dengan jumlah cluster yang berbeda, masing-masing ditentukan dalam lembar excel. Nama fitur adalah nama gen dan id fitur dapat diabaikan.   -  person Michelle    schedule 15.01.2020
comment
Jadi, pada dasarnya untuk setiap nama gen, ini terkait dengan nilai logFC dan nilai p tergantung clusternya, benar kan? Jadi, misalnya cluster 1 akan menjadi cluster makrofag. Namun untuk menjawab pertanyaan Anda, program Anda tidak mengembalikan jumlah sel di setiap cluster jadi saya tidak mengerti bagaimana Anda bisa mendapatkan persentase yang Anda cari   -  person dc37    schedule 15.01.2020
comment
Itu benar, tapi seluruh file itu untuk cluster makrofag. Dan tidak, tetapi apakah ada cara untuk tetap membuat grafik batang bertumpuk pada file itu?   -  person Michelle    schedule 15.01.2020
comment
Oke, jadi pada dasarnya Anda memiliki satu file serupa untuk setiap cluster utama? Dalam hal ini apakah berarti setiap kolom cluster1,cluster2 dari cluster makrofag adalah sel1, sel2 dari cluster ini?   -  person dc37    schedule 15.01.2020
comment
Apa yang dimaksud dengan sel1, sel2?   -  person Michelle    schedule 15.01.2020
comment
Jika contoh Anda, ada 4 cluster yang ditentukan dalam file cluster makrofag. Apakah mereka menunjuk sebuah cluster di cluster makrofag? atau satu sel di cluster makrofag?   -  person dc37    schedule 15.01.2020
comment
Sebuah cluster dalam cluster makrofag.   -  person Michelle    schedule 15.01.2020
comment
Begitu, jadi saya khawatir berdasarkan file ini, Anda tidak memiliki cara untuk mengetahui jumlah sel di setiap cluster atau sub-cluster. Saya rasa Anda perlu melihat parameter browser pembesar untuk analisis sel tunggal guna melihat apakah Anda bisa mendapatkan angka-angka ini. Maaf   -  person dc37    schedule 15.01.2020


Jawaban (1)


Tanpa mengetahui struktur data Anda, sangat sulit menebak kode apa yang bagus untuk contoh Anda.

namun, jika kami berasumsi bahwa Anda memiliki setiap kondisi, Anda memiliki daftar sel individual, masing-masing dengan label tertentu yang sesuai dengan jenis selnya seperti dalam contoh berikut:

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
...       ...

Anda dapat menggunakan dplyr hingga bind_rows pertama:

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

Kemudian, Anda dapat menghitung jumlah setiap jenis sel dalam setiap kondisi dan menyatakannya sebagai persentase:

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 

Kemudian, Anda dapat memplot hasilnya dalam diagram batang bertumpuk untuk setiap kondisi dan mengisi setiap warna sesuai dengan Tipe_Sel:

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))

masukkan deskripsi gambar di sini

EDIT: Membuat plot menggunakan data yang disediakan oleh OP

Dengan menggunakan data yang Anda berikan dalam pertanyaan Anda, Anda dapat melakukan:

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)

Yang memberikan kerangka data berikut:

          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

Dan kemudian, Anda dapat mengganti nama kolom Anda, menghitung persentase setiap jenis sel untuk setiap kondisi:

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

Lalu, untuk bagian plottingnya:

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))

masukkan deskripsi gambar di sini

Apakah itu menjawab pertanyaan Anda?

person dc37    schedule 12.01.2020
comment
Saya memiliki file ekspresi diferensial untuk setiap kondisi untuk setiap jenis sel tertentu, apakah itu akan berfungsi sebagai input? - person Michelle; 14.01.2020
comment
Tidak, Anda harus menggabungkan file-file ini terlebih dahulu. Saya minta maaf tetapi tanpa menunjukkan contoh kecil dari file-file ini, saya tidak dapat memandu Anda melaluinya - person dc37; 14.01.2020
comment
Mungkin Anda dapat memposting baris pertama file ekspresi diferensial yang diperoleh untuk setiap kondisi untuk satu jenis sel. (gunakan dput(head(df)) untuk menghasilkan contoh). - person dc37; 14.01.2020
comment
Saya menambahkan file ekspresi diferensial untuk cluster makrofag untuk tidak diobati dan diobati. - person Michelle; 15.01.2020
comment
Di dalam Seurat, saya bisa mendapatkan persentase untuk setiap cluster, dan syaratnya, apakah Anda tahu cara mengekspor file itu dan kemudian melakukan grafik batang bertumpuk? - person Michelle; 16.01.2020
comment
Saya tidak pernah menggunakan Seurat. Mungkin Anda dapat mengekspor sebagai file csv atau txt. Jika demikian, Anda kemudian dapat memuat ke R dan memberikan sebagian kecil dari file ini ke dalam pertanyaan Anda. Kemudian, kami dapat memandu Anda untuk grafik batang bertumpuk. - person dc37; 16.01.2020
comment
Saya telah memperbarui pertanyaan saya dengan sebagian file. - person Michelle; 20.01.2020
comment
Ya itu. Saya sekarang ingin membuat grafik batang bertumpuk lainnya tetapi dengan siklus sel yang berbeda untuk setiap jenis sel dalam jenis sel tersebut. Saya telah mengunggah file untuk itu. Tidak tahu bagaimana caranya karena sekarang saya memiliki kondisi lain (siklus sel). Saya dapat membuat grafik batang yang membandingkan siklus sel per kondisi tetapi sekarang saya ingin membandingkan jenis sel dan siklus sel di setiap kondisi. - person Michelle; 21.01.2020
comment
Tidak tahu apakah diperlukan lebih banyak bingkai data, karena saya hanya mengerjakan bagian atasnya saja. - person Michelle; 21.01.2020
comment
Jika Anda merasa jawaban ini memuaskan pertanyaan Anda, Anda harus melihat di sini: stackoverflow.com/help/someone-answers. Untuk pertanyaan kedua Anda di komentar, saya rasa Anda harus mencoba mengajukan pertanyaan baru atau mungkin menanyakan pertanyaan ini kepada komunitas bioinformatics.stackexchange.com karena tampaknya sangat berbeda karena file pembaruan baru Anda tidak memperhitungkan hitungan cell types, jadi tidak jelas bagi saya apa yang akan Anda plot. Saya rasa mungkin Anda perlu menggunakan facet_wrap. Ada banyak sekali postingan yang menjelaskan penggunaannya pada SO. - person dc37; 21.01.2020
comment
Terlebih lagi, pertukaran komentar yang panjang sebenarnya tidak diinginkan karena cenderung mempersulit pengunjung dalam mencari solusi untuk masalah serupa. - person dc37; 21.01.2020
comment
Saya memposting bagian akhir bingkai data. - person Michelle; 21.01.2020