2017-05-15 3 views
3

Ich möchte einen gestapelten Barplot mit den Daten unverändert machen. Ich meine, ich habe die Prozente bereits berechnet. Laut dem ggplot2-Handbuch verwendet "geom_col stat_identity: es belässt die Daten unverändert". Es sieht jedoch so aus, als ob es nicht funktioniert, da die Prozente des Diagramms sich von denen der Beispieldaten unterscheiden.Gestapelte überlagerte Balken mit Daten unverändert

Beispieldaten herunterladen von here.

-Code lautet wie folgt:

ggplot(data=df, aes(x = Pathway, y = value, fill = variable)) + 
     scale_fill_manual(values=c("#005588", "#E69F00")) +                
     #stat_identity(geom="bar", width=0.5) +                              
     geom_col(width=0.5) + 
     #geom_bar(stat="identity", width=0.5) + 
     facet_grid(. ~ Timepoint) + 
     coord_flip() + 
     theme_bw() 

geom_col changes data and rows order

Auf der anderen Seite, wenn ich die Option „stat_identity“ die Daten bleiben unverändert (vgl Prozent von beiden Bildern mit Beispieldaten) verwenden, aber Die Balkenplots sind nicht mehr gestapelt.

stat_identity do not touch the data but looses stacked bars.

Ist die "geom_col" Option funktioniert nicht, oder bin ich etwas falsch gemacht? Sollte ich eine andere Plot-Methode verwenden? Jede Hilfe wird geschätzt.

dput:

structure(list(Pathway = c("Antigen Presentation Pathway", "Graft-versus- Host Disease Signaling", 
"T Helper Cell Differentiation", "Cytotoxic T Lymphocyte-mediated Apoptosis of Target Cells", 
"Communication between Innate and Adaptive Immune Cells", "Antigen Presentation Pathway", 
"Graft-versus-Host Disease Signaling", "T Helper Cell Differentiation", 
"Cytotoxic T Lymphocyte-mediated Apoptosis of Target Cells", 
"Communication between Innate and Adaptive Immune Cells", "Antigen Presentation Pathway", 
"Graft-versus-Host Disease Signaling", "T Helper Cell Differentiation", 
"Cytotoxic T Lymphocyte-mediated Apoptosis of Target Cells", 
"Communication between Innate and Adaptive Immune Cells", "Antigen Presentation Pathway", 
"Graft-versus-Host Disease Signaling", "T Helper Cell Differentiation", 
"Cytotoxic T Lymphocyte-mediated Apoptosis of Target Cells", 
"Communication between Innate and Adaptive Immune Cells", "Antigen Presentation Pathway", 
"Graft-versus-Host Disease Signaling", "T Helper Cell Differentiation", 
"Cytotoxic T Lymphocyte-mediated Apoptosis of Target Cells", 
"Communication between Innate and Adaptive Immune Cells", "Antigen Presentation Pathway", 
"Graft-versus-Host Disease Signaling", "T Helper Cell Differentiation", 
"Cytotoxic T Lymphocyte-mediated Apoptosis of Target Cells", 
"Communication between Innate and Adaptive Immune Cells"), Timepoint = c("15DPI", 
"15DPI", "15DPI", "15DPI", "15DPI", "30DPI", "30DPI", "30DPI", 
"30DPI", "30DPI", "45DPI", "45DPI", "45DPI", "45DPI", "45DPI", 
"15DPI", "15DPI", "15DPI", "15DPI", "15DPI", "30DPI", "30DPI", 
"30DPI", "30DPI", "30DPI", "45DPI", "45DPI", "45DPI", "45DPI", 
"45DPI"), variable = c("Targets", "Targets", "Targets", "Targets", 
"Targets", "Targets", "Targets", "Targets", "Targets", "Targets", 
"Targets", "Targets", "Targets", "Targets", "Targets", "DEGs", 
"DEGs", "DEGs", "DEGs", "DEGs", "DEGs", "DEGs", "DEGs", "DEGs", 
"DEGs", "DEGs", "DEGs", "DEGs", "DEGs", "DEGs"), value = c(2.63157894736842, 
4.16666666666667, 1.36986301369863, 3.125, 1.12359550561798, 
7.89473684210526, 18.75, 8.21917808219178, 18.75, 7.86516853932584, 
15.7894736842105, 16.6666666666667, 10.958904109589, 9.375, 8.98876404494382, 
44.7368421052632, 35.4166666666667, 43.8356164383562, 37.5, 31.4606741573034, 
47.3684210526316, 43.75, 42.4657534246575, 37.5, 33.7078651685393, 
52.6315789473684, 39.5833333333333, 39.7260273972603, 31.25, 31.4606741573034)), .Names = c("Pathway", "Timepoint", "variable", 
"value"), class = "data.frame", row.names = c(NA, -30L)) 
+0

Was ist Ihre erwartete Ausgabe? der Code, den du gepostet hast, scheint für mich zu funktionieren –

+1

Stacking Bars ist anders als "Dinge so zu lassen, wie sie sind". Sie möchten den Standard "position = 'stack'", nicht die benutzerdefinierte' position'-Identität ', die Sie verwenden. – Gregor

+0

@Mike H Ich brauche die ursprünglichen Prozente aus den Beispieldaten, wie in der zweiten Grafik, aber gestapelt wie die erste Grafik. – fred

Antwort

4

Angesichts der Diskussion von Ihnen und Gregor in den Kommentaren oben, es klingt wie Sie die Plots nicht wollen, aufeinander gestapelt, sondern überlagert. Ich glaube, das sollte für Sie arbeiten:

ggplot(data=df, aes(x = Pathway, y = value, fill = variable)) + 
    scale_fill_manual(values=c("#005588", "#E69F00")) +                
    geom_col(width = 0.5, alpha = 0.5, position = "identity") + 
    facet_grid(. ~ Timepoint) + 
    coord_flip() + 
    theme_bw() 

enter image description here

ich position = "identity" verwenden, um sicherzustellen die Balken stapeln nicht. Ich musste auch die Bars mit alpha = 0.5 transparent machen, damit Sie sie sehen können.


Eine weitere Option, wenn Sie wollen, dass sie nebeneinander statt Stapel aufgetragen haben, ist position = "dodge" zu verwenden:

ggplot(data=df, aes(x = Pathway, y = value, fill = variable)) + 
    scale_fill_manual(values=c("#005588", "#E69F00")) +                
    geom_col(width=0.5, position = "dodge") + 
    facet_grid(. ~ Timepoint) + 
    coord_flip() + 
    theme_bw() 

enter image description here

Verwandte Themen