2016-05-11 11 views
0

Ich habe Probleme mit dem folgenden Problem und würde Ihre Hilfe sehr zu schätzen wissen.Streudiagramme, Gruppen und Fehlerbalken in ggplot2

Ich habe folgende Daten (dies ist nur ein willkürliches Beispiel für eine Vereinfachung)

x<- c('left', 'left', 'left', 'right', 'right', 'right') 
y<- c (0.5, 0.3, 0.2, 0.5, 0.7, 0.2) 
conf<- c(1.5, 1.7, 3, 2, 3, 1) 
df <-data.frame(x,y,conf) 

ich die folgende Handlung tun wollen.

library(ggplot2) 
ggplot(df, aes(x=x, y=y))+geom_point()+coord_flip() 

Dies erzeugt das folgende Bild see photo here. Aber jeder meiner Punkte (y) hat auch ein gewisses Vertrauen (Variable conf), das ich als Vertrauenswerte auf einer anderen x-Achse darstellen möchte (das würde in diesem Fall auf der rechten Seite liegen und die Konfidenzwerte) wären vertikale Linien). Wie füge ich diese zweite X-Achse auf der rechten Seite des Diagramms hinzu, so dass es numerisch ist und dass es meine Werte als Konfidenzintervalle darstellt?

Vielen Dank für Ihre Hilfe.

+1

Warum stören Sie sich mit 'coord_flip', wenn Sie nur' aes (x = y, y = x) zuordnen können '? Ihre Namenskonvention scheint zusätzliche Verwirrung zu stiften. Um es klar zu sagen, die Unsicherheit liegt nicht im Namen "y" (horizontale) Dimension, sondern in der "x" (vertikalen) Dimension? – Gregor

+0

Mit zwei y-Achsen ist [absichtlich schwierig in ggplot] (http://stackoverflow.com/q/3099219/903061). Sie könnten jedoch leicht 'facet_wrap (~ x, ncol = 1)', map 'y = 0' und verwenden Sie eine Standard' geom_errorbar', um Unsicherheit anzuzeigen. – Gregor

+0

Ich habe versucht, aus meinen komplexeren Daten ein einfaches Beispiel zu machen, um es hier darzustellen und falsch verwirrende Namen verwenden zu können. Indem ich es zu vereinfachen versuchte, machte ich es komplizierter. @Gregor danke die facet_wrap kann auch funktionieren. – Mirta

Antwort

4

mit geom_errorbarh() Sie können dies tun:

library(ggplot2) 
ggplot(df, aes(x=x, y=y))+geom_point()+coord_flip()+ 
    geom_errorbarh(aes(xmax = as.numeric(x)+conf/10, 
         xmin = as.numeric(x)-conf/10, 
         height=0)) 

enter image description here

Aber die wie in anderen Beiträgen kann es nicht toll, mehrere Sinne auf x-Achse haben, so kann man facet:

ggplot(df, aes(x=0, y=y))+geom_point()+ 
    geom_errorbarh(aes(xmax = conf, xmin = -conf, height=0))+ 
    coord_flip()+facet_wrap(~dir, nrow=2) 

enter image description here

1

Wenn Sie sich ein wenig umsehen, zeigen einige Threads an, dass ggplot das nicht unterstützt, was Sie suchen, und es wäre im Allgemeinen eine schlechte Übung (siehe this comment und this thread).

Es scheint einen "Hack" here zu geben, der ein bisschen weiter gehen könnte, als Sie wollen.

Nebenbei: Darf ich fragen, warum Sie sich entschieden haben, Ihre y-Achse mit "x" und Ihre x-Achse mit "y" zu beschriften?

+0

das x ist x und y ist y, ich habe gerade cord_flip verwendet. (mit meinen tatsächlichen Daten kippe ich die Handlung, weil es besser für die Darstellung ist, aber es mit diesen erfundenen Daten zu machen, war sinnlos und verwirrend). – Mirta