2016-07-19 4 views
0

Ich habe einen Datenrahmen der relativen bakteriellen Häufigkeiten für 152 Proben (Zeilen.) Ich würde gerne eine gestapelte Balkendiagramm der Gesamtabundanzen für jede Bakteriengruppe über alle Proben (z. B. Actinovacteria vs. Bacteroidetes vs. Firmicutes etc ..) Ich möchte es farbcodiert, mit einer Legende dafür auch. Kann mir bitte jemand vorschlagen, wie das geht? Mein Problem ist, dass ich nicht sicher bin, wie die Spaltensummen für das Zeichnen in R erhalten werden. Danke.Making Stack Balkendiagramm der bakteriellen Fülle

row.names  Actinobacteria Bacteroidetes Firmicutes Fusobacteria Proteobacteria Verrucomicrobia Other 
1 sample1 0.0084246282 0.41627099 0.55475503 0.000000e+00 7.245180e-04 5.391762e-05 1.977092e-02 
2 sample2 0.0168571327 0.13298800 0.80289437 3.560112e-05 4.272135e-03 4.238314e-02 5.696180e-04 
3 sample3 0.0020299288 0.53813817 0.42367947 3.311006e-02 7.978327e-04 3.534702e-05 2.209189e-03 
+1

[Umformen] (http://stackoverflow.com/question s/1181060) plotten Sie Ihre Daten. Hier ist [ein Beispiel] (http://stackoverflow.com/a/25936383/680068) mit ggplot – zx8754

Antwort

1

war ich nicht klar, ob die Probennamen die Zeilennamen in Ihrem Datenrahmen waren, so dass ich neu erstellt einfach den Datenrahmen der Beispielnamen in einer Variablen, gleich wie die Bakterien Namen setzen:

Sample Actinobacteria Bacteroidetes Firmicutes Fusobacteria Proteobacteria 
1 sample1 0.008424628  0.4162710 0.5547550 0.000000e+00 0.0007245180 
2 sample2 0.016857133  0.1329880 0.8028944 3.560112e-05 0.0042721350 
3 sample3 0.002029929  0.5381382 0.4236795 3.311006e-02 0.0007978327 
    Verrucomicrobia  Other 
1 5.391762e-05 0.019770920 
2 4.238314e-02 0.000569618 
3 3.534702e-05 0.002209189 

um diesen Datensatz zu reproduzieren Sie den folgenden Befehl ausführen können:

df <- structure(list(Sample = structure(1:3, .Label = c("sample1", 
"sample2", "sample3"), class = "factor"), Actinobacteria = c(0.0084246282, 
0.0168571327, 0.0020299288), Bacteroidetes = c(0.41627099, 0.132988, 
0.53813817), Firmicutes = c(0.55475503, 0.80289437, 0.42367947 
), Fusobacteria = c(0, 3.560112e-05, 0.03311006), Proteobacteria = c(0.000724518, 
0.004272135, 0.0007978327), Verrucomicrobia = c(5.391762e-05, 
0.04238314, 3.534702e-05), Other = c(0.01977092, 0.000569618, 
0.002209189)), .Names = c("Sample", "Actinobacteria", "Bacteroidetes", 
"Firmicutes", "Fusobacteria", "Proteobacteria", "Verrucomicrobia", 
"Other"), class = "data.frame", row.names = c("1", "2", "3")) 

Wie @ zx8754 vorgeschlagen, erfordert diese Datenrahmen Umformung, dh aus einem breiten Format zu einem langen Format zu bewegen. Für weitere Informationen, überprüfen Sie diese link für ein paar Beispiele.

Wenn der Datenrahmen über df genannt wird, wird der folgende Befehl es im langen Format umformen:

library(reshape2) 
df_long <- melt(df, id.vars = "Sample", variable.name = "Phyla") 

Von hier aus können wir mit ggplot Grundstück:

library(ggplot2) 
ggplot(df_long, aes(x = Sample, y = value, fill = Phyla)) + 
    geom_bar(stat = "identity") 

die gibt:

enter image description here

+0

Vielen Dank. Gibt es eine Möglichkeit, es zu ändern, so dass der Legendentitel "Phyla" anstelle von Variable sagt? – espop23

+0

Sicher, 'variable' ist einfach der Name der Spalte, die den Bakteriennamen in' df_long' enthält. Wenn Sie den Namen dieser Spalte im Datenrahmen ändern, ändert sich der Legendentitel entsprechend. Alternativ können Sie es direkt im 'melt'-Verfahren ändern. Ich habe den Code bearbeitet, um das hinzuzufügen. – thepule

+1

Oder Sie können den tatsächlichen Legendentitel ändern, ohne etwas mit den Daten zu tun: http://www.cookbook-r.com/Graphs/Legends_%28gplot2%29/ –