2016-11-02 4 views
1

Ich habe folgende Datenrahmen df:Wie wird die Standardabweichung als Form angezeigt?

structure(list(queue = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("XXX1", 
"XXX2", "XXX3", "XXX4", 
"XXX5", "XXX6", "XXX7", 
"XXX8", "XXX9", "XXX10"), class = "factor"), 
    hour = c(8, 9, 10, 11, 12, 13), num_at = c(5, 10.6923076923077, 
    8.35294117647059, 7.74285714285714, 10.0769230769231, 9.34615384615385 
    ), num_wt = c(1.8, 8.28571428571429, 11.3478260869565, 11.2121212121212, 
    17.5185185185185, 6.68421052631579),num_wt_se = c(0.8, 0.25, 1.3, 1.4, 
    1.5, 2.6),num_at_se = c(1.2, 1.2, 1.3, 1.2, 
    1.1, 2.3)), .Names = c("queue", 
"hour", "num_at", "num_wt","num_at_se","num_wt_se"), row.names = c(NA, 6L), class = "data.frame") 

ich ein Diagramm mit zwei Linienkurven erstellt, entspricht der 1. bis num_wt, während die zweite entspricht num_at Werte.

library("dplyr") 
library("tidyr") 
library("ggplot2") 

p <- df[df$queue == "XXX1",] %>% 
      gather(key, num, num_wt, num_at) %>% 
      ggplot(aes(x=hour, y=num, colour=key)) + 
      geom_smooth(span = 0.3) + 
      scale_color_manual(labels = c("Line 1", "Line 2"), values = c("#F8AA5A", "#BD63BD")) + 
      labs(title = "Title", 
       x = "Hour", 
       y = "Value", 
       color = "") 
p 

Jetzt möchte ich für num_wt und num_at die Standardabweichung zeigen, die entsprechend in num_wt_se und num_at_se, gespeichert wird. Ich möchte die Standardabweichung als eine Form darstellen, nicht als Linien. Wie kann ich es tun? Ich googeln für eine mögliche Lösung und dieses hier gefunden, aber es ist nichts in meinem Fall zeigt:

stat_smooth(method="loess", span=0.1, se=TRUE, aes(fill=key), alpha=0.3) +

+0

meinst du 'geom_violin()'? – roman

+0

@roman: Es sieht so aus. Aber wie definiert man es für +/- "num_at_se" und +/- "num_wt_se" auf demselben Diagramm? – FiofanS

Antwort

0

Dataset unter der Annahme, heißt d und Sie nicht gather(), wie über dieses

ggplot(d, aes(x=hour, y=num_at)) + 
    geom_ribbon(aes(ymax = num_at + num_at_se, 
        ymin = num_at - num_at_se), 
       fill = grey(0.5), alpha = 0.5) + 
    geom_line() 

, wenn Sie den gather() Schritt dann pflegen wollen versuchen, diese

dd <- d %>% 
    gather(variable, value, -(1:2)) %>% 
    separate(variable, c("type", "measurement"), "t") %>% 
    spread(measurement, value) 
colnames(dd)[4:5] <- c("value", "se") 

ggplot(dd, aes(x=hour, y=value)) + 
    geom_ribbon(aes(ymax = value + se, 
        ymin = value - se, 
        fill = type), 
       alpha = 0.5) + 
    geom_line(aes(colour = type)) 
+0

Sollte ich noch ein 'geom_ribbon' mit einer anderen Farbe für die' num_wt_se' hinzufügen? – FiofanS

+0

Anstelle von 'geom_line()' würde ich 'geom_smooth (span = 0.3)' bevorzugen. Ist es möglich, auch die Form zu glätten (d. H. 'Geom_ribbon')? Außerdem verwende ich 'gather', um separate Linienkurven für' num_wt' und 'num_at' zu erstellen. Ich möchte diesen Ansatz beibehalten oder zumindest alle Kurven in einem Diagramm darstellen können. – FiofanS

+0

Wenn ich es wäre, würde ich es nicht rein für ästhetische Wirkung glätten. Zeige immer die Daten :-) Wenn du einen bestimmten Grund hast, die Daten zuerst zu "modellieren" und das Modell dann zu zeichnen, tu das, ich kann dir helfen, wenn du weiter erklärst, was die Absicht ist. – roman

Verwandte Themen