2016-07-24 8 views
1

meine Datenrahmen geht so:Grundstück mehr als eine Spalte + facet_grid (ggplot)

NUMBER MEDIUM DATE DAY TREAT NITRAT SILI PHOSPHAT 
1 NUT1 15/07/2016 two NBNA 20.831 20.946 0.518 
2 NUT2 15/07/2016 two NBNA 26.594 25.075 1.059 
3 NUT3 15/07/2016 two NBNA 47.565 42.088 7.733 
4 NUT4 15/07/2016 two NBNA 61.320 53.264 6.331 
5 NUT5 15/07/2016 two NBNA 64.918 52.058 4.889 
6 NUT1 15/07/2016 two NBNA 19.876 22.000 0.852 
7 NUT2 15/07/2016 two NBNA 29.642 29.572 1.184 
8 NUT3 15/07/2016 two NBNA 37.969 35.015 4.293 
9 NUT4 15/07/2016 two NBNA 56.724 45.986 6.880 
10 NUT5 15/07/2016 two NBNA 66.006 53.175 5.893 
11 NUT1 15/07/2016 two NBNA 21.835 20.710 0.770 
12 NUT2 15/07/2016 two NBNA 25.996 26.213 1.149 
13 NUT3 15/07/2016 two NBNA 48.526 46.167 3.977 
14 NUT4 15/07/2016 two NBNA 56.767 47.089 6.684 
15 NUT5 15/07/2016 two NBNA 64.841 54.039 6.628 
16 NUT1 15/07/2016 two NBA1 13.179 18.723 0.826 
17 NUT2 15/07/2016 two NBA1 18.631 23.537 0.859 

Ich mag würde die Werte von NITRAT, SILI und PHOSPHAT (mit Fehlerbalken) in einem ggplot setzen sortiert nach MITTEL. Zusammenfassend, so etwas wie dies (aber auch mit Fehlerbalken): enter image description here zu tun, so habe ich die Funktion Schmelze versucht:

df <- melt(nut, id.vars='MEDIUM') 

jedoch mit dieser Funktion erlaubt mir nicht, danach zu verwenden facet_grid

ggplot() + 
    geom_bar(data=df, aes(x=MEDIUM, y=value, fill=MEDIUM), 
      stat="identity", colour="black") + facet_grid(~TREAT) 

Antwort

2

Sie haben ein paar Probleme bekam hier aufzuräumen:

  1. Zuerst nur die Spalten, die Sie auf „Stapel“ wollen (das heißt, verwenden für die fill Ästhetik) nicht in id.vars sein:

    df <- melt(nut, id.vars=c('MEDIUM','NUMBER','DATE','DAY','TREAT') 
    

    den obigen Code Versuchen mit verschiedenen Kombinationen von id.vars etwas Intuition zu bekommen, wie es funktioniert.

  2. fill=variable gibt Ihnen jetzt Bars für jede der drei Arten von Messungen (NITRAT, SILI und PHOSPHAT). TREAT wird immer noch eine Spalte im geschmolzenen Datenrahmen sein, weil es einer der id.vars war, so dass Sie es für die Facettierung verwenden können.

  3. Ein anderes Problem ist, dass es so aussieht, als ob die Balken eigentlich der Mittelwert aller Werte sein sollen, die in diesen Balken eingehen. Also willst du nicht stat="identity". Verwenden Sie stattdessen stat_summary, um die Mittelwerte zu berechnen und sie als Balken darzustellen.

  4. Um Fehlerbalken hinzuzufügen, verwenden Sie einen anderen Aufruf an stat_summary. Ich habe Bootstrapped Konfidenzintervalle (mean_cl_boot) verwendet. Verwenden Sie für klassische Konfidenzintervalle mean_cl_normal.

    pd=position_dodge(0.8) 
    
    ggplot(df, aes(x=MEDIUM, y=value, fill=variable)) + 
        stat_summary(fun.y=mean, geom="bar", width=0.7, position=pd) + 
        stat_summary(fun.data=mean_cl_boot, geom="errorbar", position=pd, width=0.3) + 
        facet_grid(. ~ TREAT) + 
        theme_bw() 
    

enter image description here

Für eine Handlung wie diese, könnten Punkte besser als Bars. Hier zeichnen wir zuerst die Fehlerbalken statt der zweiten, weil wir die Punkte "über den Balken" haben wollen. Es wird hier nicht egal, weil beide die gleiche Farbe haben, aber ich mache es aus Gewohnheit, wie ich oft unterschiedliche Farben oder Transparenz für die Fehlerbalken verwenden:

pd=position_dodge(0.4) 

ggplot(df, aes(x=MEDIUM, y=value, colour=variable)) + 
    stat_summary(fun.data=mean_cl_boot, geom="errorbar", position=pd, width=0.3) + 
    stat_summary(fun.y=mean, geom="point", position=pd) + 
    facet_grid(. ~ TREAT) + 
    theme_bw() 

enter image description here

+0

Hallo, danke, ich aber, habe immer noch Probleme die Fehlerbalken zu setzen. Ich habe summarySE verwendet, um die Fehlerbalken zu berechnen und dann tun dies 'ggplot() + geom_bar (Daten = ds, AES (x = MEDIUM, y = Wert, füllen = Variable), stat =" Identität ", Farbe = "schwarz", position = "ausweichen") + facet_grid (~ TREAT) + geom_errorbar (Daten = ds, aes (x = MEDIUM, ymin = Wert-se, ymax = Wert + se), Größe = 0,5, width = .4, position = position_dodge (.9)) ' – kumbu