2017-04-18 6 views
0

Ich habe eine Zeitreihendaten für verschiedene Gruppenkomponenten. Jede Gruppen-ID mit ihren verschiedenen Zeitstempeln (als Date angegeben) hat Hypo- und Hyper-Antwortdaten. Ich möchte die Zeitreihe für jede dieser Gruppe durch Facette (ggplot) für sowohl (1) Gruppen-ID als auch durch Antwort, d. H. (2) Hyper- und Hypo-Antwort, plotten, so dass das Bild nach Antwort übereinander liegt. Jede Hilfe wird geschätzt.Plotten von ggplot in R

Ein Demo-Datensatz und was ich bisher gemacht habe, ist unten angegeben.

set.seed(1) 
tdat <- data.frame(Group = rep(paste0("GroupID-", c("A","B")), 
           each = 100), 
        Date = rep(seq(Sys.Date(), by = "1 day", length = 100), 2), 
        Fitted = c(cumsum(rnorm(100)), cumsum(rnorm(100))), 
        Signif = rep(NA, 200)) 
tdat <- transform(tdat, Hyper = Fitted + 1.5, Hypo = Fitted - 1.5) 
## select 1 region per Site as signif 
take <- sample(10:70, 2) 
take[2] <- take[2] + 100 
tdat$Signif[take[1]:(take[1]+25)] <- tdat$Fitted[take[1]:(take[1]+25)] 
tdat$Signif[take[2]:(take[2]+25)] <- tdat$Fitted[take[2]:(take[2]+25)] 

Und der Datenrahmen wie folgt aussieht -

> head(tdat) 
     Group  Date  Fitted Signif  Hyper  Hypo 
1 GroupID-A 2017-04-18 -0.6264538  NA 0.8735462 -2.1264538 
2 GroupID-A 2017-04-19 -0.4428105  NA 1.0571895 -1.9428105 
3 GroupID-A 2017-04-20 -1.2784391  NA 0.2215609 -2.7784391 
4 GroupID-A 2017-04-21 0.3168417  NA 1.8168417 -1.1831583 
5 GroupID-A 2017-04-22 0.6463495  NA 2.1463495 -0.8536505 
6 GroupID-A 2017-04-23 -0.1741189  NA 1.3258811 -1.6741189 

Die Zeitreihen von Datum angegeben ist.

Die Daten, die ich gezeichnet habe, sind unten angegeben. Meine echten Daten haben jedoch mehr Gruppen-IDs und ich möchte wirklich ein Bild für jede Gruppen-ID mit der Aufteilung des Bildes für die Hyper- und Hypo-Antwort.

library(ggplot2) 
ggplot(tdat, aes(x = Date, y = Fitted, group = Group)) + 
    geom_line() + 
    geom_line(mapping = aes(y = Hyper), lty = "dashed") + 
    geom_line(mapping = aes(y = Hypo), lty = "dashed") + 
    geom_line(mapping = aes(y = Signif), lwd = 1.3, colour = "red") + 
    facet_wrap(~ Group) 

Wieder wird jede Hilfe geschätzt.

Dank

+0

So ist die Handlung in Ihrem Beispiel ist nicht Ihre erwartete Ausgabe? Hast du stattdessen 'facet_grid()' ausprobiert? – Jimbou

Antwort

3

Wie wäre es damit so etwas wie, geom_ribbon mit dem Hyper und Hypo Werte zeigen:

tdat %>% 
ggplot(aes(Date, Fitted)) + 
    geom_line(lty = "dashed") + 
    geom_line(aes(y = Signif), lwd = 1.3, color = "red") + 
    geom_ribbon(aes(ymin = Hypo, ymax = Hyper, group = Group), alpha = 0.2) + 
    facet_grid(Group ~ .) + 
    theme_light() 

Ergebnis: enter image description here

+0

Es tut mir leid, das Bild unten funktioniert. – user44552

+0

Ja, es beantwortet Ihre Frage besser als geschrieben. Was ist die bessere Visualisierung, naja du bist der Richter :) – neilfws

5

Wenn Sie Ihre Daten mit reshape2 oder tidyrreshape werden oder data.table und konvertieren breit zu lang:

library(reshape2) 
tdat2<-melt(tdat,id.vars = c("Group","Date","Signif","Fitted")) 

ggplot(tdat2, aes(x = Date, y = value, group = Group)) + 
geom_line() + 
geom_line(mapping = aes(y = Signif), lwd = 1.3, colour = "red") + 
facet_wrap(variable~ Group) 

enter image description here

+0

Anstatt 'facet_wrap' zu verwenden, würde ich' facet_grid (variable ~ Group) 'verwenden. IMO ist es eleganter und caleaner. – Jimbou

+0

Ich wollte nichts ändern aber geben was OP wollen. OP verwendet 'facet_wrap (~ Group)'. Stimmen Sie zu, dass 'facet_grid' sauberer ist und' theme' verbessert werden kann. –

+0

Das war keine Kritik. Nur ein zusätzlicher Kommentar. – Jimbou