2016-07-31 8 views
2

Ich habe Probleme mit der Visualisierung meiner Datenmenge mit der Option geom_line und stat_smooth. Hierstarker Unterschied zwischen geom_line und stat_smooth in ggplot2

ist ein Beispiel aus meiner Daten-Set, das ich von dput erstellt:

example_data <- structure(list(treatment1 = c(-1.41, -1.49, -1.6, -1.65, -1.64, 
               -1.76, -1.73, -1.55, -1.35, -1.22, -1.36, -1.49, -1.49, -1.45, 
               -1.45, -1.43, -1.36, -1.45, -1.31, -1.31, -1.31, -1.19, -0.95, 
               -1.07, -1.07, -1.13, -1.1, -1.02, -1.01, -0.9, -0.88, -0.78, 
               -0.76, -0.7, -0.6, -0.33, -0.28, -0.25, -0.07, 0.18, 0.21, 0.35, 
               0.49, 0.54, 0.8, 1.11, 1.28, 1.41, 1.62, 1.67, 1.62, 1.66, 1.47, 
               1.43, 1.23, 1.02, 1.04, 0.91, 0.72, 0.67, 0.53, 0.43, 0.16, -0.04, 
               -0.13, -0.12, -0.15, -0.28, -0.49, -0.38, -0.65, -0.83, -0.76, 
               -0.76, -0.73, -0.81, -0.85, -0.86, -0.85, -0.97, -0.94, -0.99, 
               -1.05, -1.03, -1.01, -1.13, -1.06, -1.07, -1.18, -1.22, -1.34, 
               -1.39, -1.39, -1.48, -1.34, -1.46, -1.47), treatment2 = c(-1.36, 
                             -1.39, -1.37, -1.34, -1.37, -1.4, -1.38, -1.36, -1.36, -1.35, 
                             -1.34, -1.34, -1.32, -1.28, -1.29, -1.28, -1.22, -1.21, -1.2, 
                             -1.17, -1.18, -1.16, -1.11, -1.08, -1.06, -1.03, -0.98, -0.95, 
                             -0.88, -0.82, -0.77, -0.68, -0.66, -0.56, -0.48, -0.38, -0.3, 
                             -0.19, -0.08, 0.08, 0.22, 0.34, 0.5, 0.64, 0.89, 1.18, 1.41, 
                             1.52, 1.66, 1.68, 1.67, 1.64, 1.62, 1.53, 1.39, 1.25, 1.09, 0.93, 
                             0.71, 0.51, 0.3, 0.11, -0.06, -0.23, -0.39, -0.53, -0.6, -0.71, 
                             -0.81, -0.88, -0.97, -1.02, -1.07, -1.13, -1.15, -1.18, -1.2, 
                             -1.24, -1.25, -1.32, -1.32, -1.33, -1.37, -1.38, -1.41, -1.43, 
                             -1.42, -1.47, -1.45, -1.46, -1.44, -1.47, -1.47, -1.5, -1.49, 
                             -1.5, -1.48), treatment3 = c(-1.28, -1.27, -1.35, -1.31, -1.37, 
                                    -1.25, -1.12, -0.97, -1.17, -1.04, -1.08, -1.35, -1.26, -1.33, 
                                    -1.16, -1.05, -0.93, -1.01, -1.06, -1.05, -0.93, -1.1, -1.12, 
                                    -0.93, -0.97, -0.85, -0.85, -0.76, -0.72, -0.82, -0.82, -0.58, 
                                    -0.61, -0.55, -0.49, -0.36, -0.3, -0.16, -0.23, -0.12, -0.02, 
                                    0.14, 0.22, 0.54, 0.75, 0.87, 1.35, 1.32, 1.51, 1.6, 1.7, 1.6, 
                                    1.59, 1.53, 1.2, 1.05, 0.78, 0.67, 0.56, 0.35, 0.13, -0.09, -0.11, 
                                    -0.35, -0.47, -0.5, -0.66, -0.7, -0.89, -0.88, -1.17, -1.01, 
                                    -1.03, -1.18, -0.98, -1.06, -1.07, -1.17, -1.18, -1.16, -1.31, 
                                    -1.21, -1.18, -1.3, -1.33, -1.14, -1.24, -1.21, -1.08, -1.27, 
                                    -1.23, -1.26, -1.26, -1.35, -1.38, -1.32, -1.32), position = c(195, 
                                                    245, 295, 345, 395, 445, 495, 545, 595, 645, 695, 745, 795, 845, 
                                                    895, 945, 995, 1045, 1095, 1145, 1195, 1245, 1295, 1345, 1395, 
                                                    1445, 1495, 1545, 1595, 1645, 1695, 1745, 1795, 1845, 1895, 1945, 
                                                    1995, 2045, 2095, 2145, 2195, 2245, 2295, 2345, 2395, 2445, 2495, 
                                                    2545, 2595, 2645, 2695, 2745, 2795, 2845, 2895, 2945, 2995, 3045, 
                                                    3095, 3145, 3195, 3245, 3295, 3345, 3395, 3445, 3495, 3545, 3595, 
                                                    3645, 3695, 3745, 3795, 3845, 3895, 3945, 3995, 4045, 4095, 4145, 
                                                    4195, 4245, 4295, 4345, 4395, 4445, 4495, 4545, 4595, 4645, 4695, 
                                                    4745, 4795, 4845, 4895, 4945, 4995)), .Names = c("treatment1", 
                                                                "treatment2", "treatment3", "position"), row.names = c("195", 
                                                                              "245", "295", "345", "395", "445", "495", "545", "595", "645", 
                                                                              "695", "745", "795", "845", "895", "945", "995", "1045", "1095", 
                                                                              "1145", "1195", "1245", "1295", "1345", "1395", "1445", "1495", 
                                                                              "1545", "1595", "1645", "1695", "1745", "1795", "1845", "1895", 
                                                                              "1945", "1995", "2045", "2095", "2145", "2195", "2245", "2295", 
                                                                              "2345", "2395", "2445", "2495", "2545", "2595", "2645", "2695", 
                                                                              "2745", "2795", "2845", "2895", "2945", "2995", "3045", "3095", 
                                                                              "3145", "3195", "3245", "3295", "3345", "3395", "3445", "3495", 
                                                                              "3545", "3595", "3645", "3695", "3745", "3795", "3845", "3895", 
                                                                              "3945", "3995", "4045", "4095", "4145", "4195", "4245", "4295", 
                                                                              "4345", "4395", "4445", "4495", "4545", "4595", "4645", "4695", 
                                                                              "4745", "4795", "4845", "4895", "4945", "4995"), class = "data.frame") 

Mein Ziel, alle drei Behandlungen in ein Diagramm mit der Abweichung plotten und einer angepassten Linie durch alle Datenpunkte, deshalb habe ich:

x <- (ggplot(example_data) 
+ geom_line(aes(x=position , y = treatment1, col = "treatment1")) 
+ stat_smooth(data = example_data, aes(x = position , y = treatment1)) 
+ geom_line(aes(x= position, y = treatment2, col ="treatment2")) 
+ stat_smooth(data = example_data, aes(x = position , y = treatment2)) 
+ geom_line(aes(x=position , y = treatment3, col = "treatment3")) 
+ stat_smooth(data = example_data, aes(x = position , y = treatment3))) 

Allerdings sind die Linien sehr stachelig und die stat_smooth scheint nicht sehr gut auf den höchsten Gipfel zu vertreten. Vielleicht benutze ich die falschen Werkzeuge, gibt es eine Möglichkeit, nur eine Linie pro Behandlung darzustellen, mit einer Abweichung, die jedoch die Datenpunkte genauer darstellt als stat_smooth?

Da ich gerade ein Anfänger in R bin und vor allem in ggplot frage ich mich, ob ich den ungeschickten Code kürzer umschreiben könnte, ohne immer die aes(x = ..., y= ...) separat zu erwähnen.

+0

str() von oben ist dput alle Zeichenklasse. Überprüfen Sie Ihre Daten erneut und aktualisieren Sie Ihren Beitrag. – zx8754

+2

Was @ zx8754 sagt, würde erklären, warum Ihre x-Achse verkrampft ist. ggplot denkt, dass jede Zahl eine Kategorie ist. Wenn Sie 'as.numeric' auf diese Spalten anwenden, weiß ggplot, dass es sich um Zahlen handelt. – Warner

+1

Vielen Dank @ zx8754 für diese Hilfe, löste es bereits die ersten zwei Fragen, die ich hatte. –

Antwort

0

Wir müssen Daten für ggplot vorbereiten, konvertieren von breit zu lang mit Behandlungsgruppe Namen als Farbe.

library(tidyr) #gather function 
library(ggplot2) 

# convert from wide to long format using gather function. 
plotDat <- gather(example_data, treatment, value, -position) 

# then plot with colours assigned to treatment group. 
ggplot(plotDat, aes(position, value, col = treatment)) + 
    geom_line() + 
    geom_smooth() 

enter image description here