2016-08-01 9 views
0

Ich versuche, ein facettiertes Diagramm aus einem Datenrahmen zu machen, der zeigt, wie sich eine Variable als eine Funktion anderer Variablen ändert. Mit jeder Variablen ist ein Fehler verknüpft. Hier ist eine Teilmenge der Daten, die ich habe; eine ID-Spalte, die Variablen (SiO 2 zu FeO) und die mit den Variablen zugeordneten Fehler (* _2stdev):Hinzufügen von Fehlerbalken zu einzelnen Punkten in facettierten Plots

df<-structure(list(ID = structure(c(3L, 4L, 6L, 1L, 2L, 10L), .Label = c("P466-an1", "P466-an2", "P468-an1", "P468-an2", "P469-an1", "P470-an1", "P471-an1", "P472-an1", "P473-an1", "P474-an1", "P475-an1", "P475-an2", "P476-an1", "P476-an2", "P477-an1", "P478-an1", "P479-an1", "P480-an1"), class = "factor"), 
      SiO2 = c(54.5147, 56.2223, 52.8499, 52.0293, 53.4221, 52.9802), 
      TiO2 = c(0.5928, 0.5792, 0.5771, 1.1373, 1.0962, 1.1535), 
      Al2O3 = c(17.5404, 18.1921, 19.4737, 15.7752, 16.455, 16.4117), 
      FeO = c(6.2115, 5.8676, 5.4874, 4.5952, 4.4242, 4.109), 
      SiO2_2stdev = c(1.5232, 2.3578, 0.6374, 1.3331, 0.6535, 0.6977), 
      TiO2_2stdev = c(0.0638, 0.0637, 0.0357, 0.1024, 0.0422, 0.0282), 
      Al2O3_2stdev = c(0.4519, 0.4572, 0.2044, 0.6378, 0.6546, 0.0624), 
      FeO_2stdev = c(0.426, 0.3973, 0.1145, 0.1992, 0.1106, 0.0427)), 
      .Names = c("ID", "SiO2", "TiO2", "Al2O3", "FeO", "SiO2_2stdev", "TiO2_2stdev", "Al2O3_2stdev", "FeO_2stdev"), 
      row.names = c(NA, 6L), class = "data.frame") 

Verwendung des folgenden Codes:

library(reshape2) 
library(ggplot2) 

m.df<-melt(df, id=c('ID','FeO')) 

p<-ggplot(subset(m.df, variable %in% c('SiO2','TiO2','Al2O3')),aes(x=value, y=FeO))+ 
    geom_point()+ 
    facet_wrap(~ variable, ncol=1, scales="free_x")+ 
    theme_bw() 

p 

Ich erhalte diese Handlung:

plot with no errorbars

Ich möchte die Fehlerbalken (vertikal und horizontal) dazu hinzufügen, aber ich weiß nicht, wie man das in einem facettierten Diagramm macht.

Mit geom_errorbar und geom_errorbarh konnte ich diese für einzelne Plots aus dem ungeschmolzenen Datenfeld plotten. Ich nehme an, ich könnte alle Plots mit einer Schleife erstellen, aber ich weiß nicht, wie man die Fehlerbalken mit dieser Methode hinzufügt. Außerdem würde ich gerne alle Pläne auf einmal sehen.

Vielen Dank für das Lesen dieser und jede Hilfe wird sehr geschätzt! -R

bearbeiten Per AOSMITH ‚s Kommentar, ich FeO_2stdev auf die ID-Variablen in melt hinzugefügt haben. Ich bin jetzt in der Lage, ein Diagramm mit den richtigen vertikalen Fehlerbalken zu erzeugen. So, jetzt habe ich Probleme zu verstehen, wie ich geom_errorbarh bekommen kann, um die richtigen Fehlerbalken für jedes Diagramm zu plotten.

Unten ist der aktualisierte Code, den ich verwende, mit dem resultierenden Plot.

library(reshape2) 
library(ggplot2) 

m.df<-melt(df, id=c('ID','FeO', 'FeO_2stdev')) 
m.df$y.min<-m.df$FeO-m.df$FeO_2stdev 
m.df$y.max<-m.df$FeO+m.df$FeO_2stdev 

p<-ggplot(subset(m.df, variable %in% c('SiO2','TiO2','Al2O3')), aes(x=value, y=FeO))+ 
    geom_point()+ 
    facet_wrap(~ variable, ncol=1, scales="free_x")+ 
    theme_bw()+ 
    geom_errorbar(aes(ymin=y.min, ymax=y.max)) 

p 

plot with vertical errorbars

+0

Versuchen Sie, Fehlerbalken basierend auf 'FeO_2stdev' hinzufügen? Wenn ja, behalte diese Variable als eine deiner ID-Variablen in 'melt', damit du sie in' geom_errorbar' verwenden kannst. Wenn nicht, können Sie klären, was Sie zur Berechnung der Fehlerbalken verwenden würden? – aosmith

+0

Ah, ja! Ich habe das jetzt getan und kann die FeO-Fehlerbarren plotten. Nun, meine Frage ist, wie man die entsprechenden horizontalen Fehlerbalken auf jedem Diagramm plottet. Ich habe die Frage aktualisiert, um dies zu berücksichtigen. – ramesesjd

Antwort

1

einen Datensatz mit einer Spalte von Werten und einer Spalte von 2 Standardabweichungen mit den horizontalen Fehlerbalken helfen zu haben. Dies ist im Wesentlichen ein Datenbearbeitungsproblem. Es gibt viele Möglichkeiten, so etwas zu erreichen. Ich benutze tidyr mit dplyr.

Zum Beispiel, wenn Sie mit m.df unmittelbar nach dem Schmelzen beginnen, könnten Sie

  1. Erstellen Sie eine neue Variable dar, ob die Zeile 2 Standardabweichungen oder den Wert repräsentiert separate und anschließend mutate mit if_else.
  2. spread der Datensatz zurück in ein breites Format, mit einer Spalte für die Werte und einer für die 2 Standardabweichungen. Sie können auch dcast von reshape2 verwenden, wenn Sie bereits damit vertraut sind.

Bibliothek (dplyr) Bibliothek (tidyr)

m.df %>% 
    separate(variable, c("variable", "metric")) %>% 
    mutate(metric = if_else(is.na(metric), "value", metric)) %>% 
    spread(metric, value) 

     ID FeO FeO_2stdev variable 2stdev value 
1 P466-an1 4.5952  0.1992 Al2O3 0.6378 15.7752 
2 P466-an1 4.5952  0.1992  SiO2 1.3331 52.0293 
3 P466-an1 4.5952  0.1992  TiO2 0.1024 1.1373 
4 P466-an2 4.4242  0.1106 Al2O3 0.6546 16.4550 
5 P466-an2 4.4242  0.1106  SiO2 0.6535 53.4221 
... 

Hier ist der gesamte Prozess gather von tidyr statt melt für die gleichen Ergebnisse mit:

df2 = df %>% 
    gather(key, value, -ID, -contains("FeO")) %>% 
    separate(key, c("variable", "metric")) %>% 
    mutate(metric = if_else(is.na(metric), "value", metric)) %>% 
    spread(metric, value) 

Nun ist die horizontale Fehlerbalken können mit value und 2stdev zu Ihrem Plot hinzugefügt werden. Beachten Sie, dass der Spaltenname 2stdev nicht syntaktisch korrekt ist, also verwende ich Backticks um den Variablennamen.

ggplot(df2, aes(x=value, y=FeO))+ 
    geom_point()+ 
    facet_wrap(~ variable, ncol=1, scales="free_x")+ 
    theme_bw() + 
    geom_errorbar(aes(ymin = FeO - FeO_2stdev, ymax = FeO + FeO_2stdev)) + 
    geom_errorbarh(aes(xmin = value - `2stdev`, xmax = value + `2stdev`)) 

enter image description here

+0

Das ist ausgezeichnet! Vielen Dank. Eine Frage: Warum ist der Backstick um '2stdev', aber nicht 'value' in 'geom_errorbarh' erforderlich? – ramesesjd

+0

In R sind Namen, die mit Zahlen beginnen, nicht syntaktisch gültig, also muss "2stdev" Back-Ticks umbrechen, aber "value" nicht. Die [Hilfeseite] (https://stat.ethz.ch/R-manual/R-devel/library/base/html/make.names.html) für 'make.names' enthält einige hilfreiche Informationen über syntaktisch gültige Namen . – aosmith

Verwandte Themen