2016-07-25 13 views
1

Ich versuche ein gruppiertes Balkendiagramm aus den folgenden Daten zu erstellen (zurückgegeben von einer ddply-Funktion), wobei die x-Achse alle 4 CWD-Variablen (für jede der 2 Stellen) und die y-Achse den Mittelwert hat.Wie kann ich ein gruppiertes Balkendiagramm in R mit den Funktionen ggplot und aes erstellen?

Mein Code ist:

library(plyr) 
library(reshape2) 
library(ggplot2) 

ddply(data, c("Site","Plot","Cover"), summarise, mean=mean(Height), sd=sd(Height), 
    sem=sd(Height)/sqrt(length(Height))) 

BranchSize <- ddply(data, c("Site","CWD"), summarise, mean=mean(Volume), 
    sd=sd(Volume), sem=sd(Volume)/sqrt(length(Volume))) 

und es gibt diese Tabelle. Ist diese Tabelle bereits ein Datenrahmen oder muss ich einen erstellen, um damit arbeiten zu können?

Site CWD  mean   sd  sem 
1 High Bark 975.7273 2603.077 554.9780 
2 High Branch 36827.7735 107668.064 13056.6706 
3 High Cage 116041.4286 154934.888 58559.8832 
4 High Log 73463.3636 121054.372 25808.8788 
5 Low Bark  40.0000   NA   NA 
6 Low Branch 1323.8280 2304.571 595.0377 
7 Low Cage 101.5000   NA   NA 
8 Low Log 102600.0000   NA   NA 

Dann mit diesem Code:

limits <- aes(ymax = BranchSize$mean + BranchSize&se, 
    ymin=BranchSize$mean - BranchSize&se) 
CWDVol<-ggplot(data = BranchSize, 
    aes(x = factor(CWD), y = mean, fill = factor(Site))) 
CWDVol 

Wenn ich diesen Befehl ausführen, wird meine Handlung, aber es gibt keine Bars.

Dann, wenn ich dies auszuführen:

CWDVol + geom_bar(stat = "identity", position_dodge(0.9)) + 
    geom_errorbar(limits, position = position_dodge(0.9), width = 0.25) + 
    labs(x = "CWD Type", y = "Average Volume") + 
    ggtitle("Average CWD Size in each Site") + 

    scale_fill_discrete(name = "Site") 

Ich erhalte immer diese Fehlermeldung: :

Irgendwelche Tipps "Error Mapping muss von aes() oder aes_() erstellt werden" würde sehr geschätzt werden.

+2

Try 'stat = "count"'? – Jimbou

+0

Übergeben Sie 'position = position_dodge (0.9)' in 'geom_bar', und in' limits', haben Sie folgendes getan: 'BranchSize $ se', es gibt keine Variable namens' se'. Außerdem müssen Sie 'BranchSize $' nicht einschließen – Sumedh

+0

Danke. Ich änderte die Statistik auf "count" und korrigierte meinen Fehler, indem ich "se" in "sem" änderte, aber es funktioniert immer noch nicht. Wenn ich CWDVol starte, erzeugt es eine Grafik ohne Balken – Dominique

Antwort

2

tl; dr Sie links den Namen des position Argument aus, so angenommen geom_bar dass position_dodge(0.9) war das mapping Argument. Sobald Sie das beheben, scheint alles gut zu funktionieren.

BranchSize <- read.table(header=TRUE,text=" 
Site CWD  mean   sd  sem 
High Bark 975.7273 2603.077 554.9780 
High Branch 36827.7735 107668.064 13056.6706 
High Cage 116041.4286 154934.888 58559.8832 
High Log 73463.3636 121054.372 25808.8788 
Low Bark  40.0000   NA   NA 
Low Branch 1323.8280 2304.571 595.0377 
Low Cage 101.5000   NA   NA 
Low Log 102600.0000   NA   NA") 

library(ggplot2) 
limits <- aes(ymax=mean+sem, ymin=mean-sem) 
CWDVol <- ggplot(data=BranchSize, 
       aes(x=factor(CWD),y=mean,fill=factor(Site))) 
CWDVol + geom_bar(stat="identity",position=position_dodge(0.9))+ 
    geom_errorbar(limits, position = position_dodge(0.9), width = 0.25) + 
    labs(x = "CWD Type", y = "Average Volume") + 
    ggtitle("Average CWD Size in each Site")+ 
    scale_fill_discrete(name = "Site")+ 
    scale_y_log10() 

Einige andere Vorschläge:

  • nicht verwenden $ innerhalb Zuordnungen, wird es nur Ärger machen
  • vielleicht +/- 2 SEM (oder 1,96 SEM) für Konfidenzintervall? (Alle Ihre Zuschauer werden wahrscheinlich diese Transformation versuchen, sonst in ihren Köpfen zu tun.)

Die Ergebnisse des Codes sind wie folgt enter image description here

+0

Vielen Dank für Ihre Hilfe! Ich schätze es sehr. Eine letzte Sache - wie würde ich gehen über Stichprobe Größe (z. B. n = 2) über jedem Balken? Ist die Verwendung von text() der einzige Weg (dann füge ich Labels manuell hinzu)? Ich extrahierte die Stichprobengröße mit Hilfe der Länge() – Dominique

+0

gibt es viele solcher Antworten auf Stapelüberlauf und das Web allgemeiner. Wenn du keine findest, schreibe eine andere Frage ... –

Verwandte Themen