time-series studio - Zeichnen von zwei Variablen als Linien mit ggplot2 im selben Graphen




title beispiele (5)

Verwenden Sie Ihre Daten:

test_data <- data.frame(
var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
Dates = seq.Date(as.Date("2002-01-01"), by="1 month", length.out=100))

Ich erstelle eine gestapelte Version, mit der ggplot() möchte:

stacked <- with(test_data,
                data.frame(value = c(var0, var1),
                           variable = factor(rep(c("Var0","Var1"),
                                                 each = NROW(test_data))),
                           Dates = rep(Dates, 2)))

In diesem Fall war das Erzeugen von stacked ziemlich einfach, da wir nur ein paar Manipulationen durchführen mussten, aber reshape() und die reshape2 und reshape2 könnten nützlich sein, wenn Sie einen komplexeren realen Datensatz zur Manipulation haben.

Sobald die Daten in dieser gestapelten Form vorliegen, benötigen Sie nur einen einfachen Aufruf von ggplot() , um das gewünschte Plot mit allen Extras zu erzeugen (ein Grund, warum ggplot2 höherer Ebene wie ggplot2 und ggplot2 so nützlich sind):

require(ggplot2)
p <- ggplot(stacked, aes(Dates, value, colour = variable))
p + geom_line()

Ich überlasse es dir, die Achsenbeschriftungen, den Legendentitel usw. aufzuräumen.

HTH

Eine sehr neue Frage, aber ich habe solche Daten:

test_data <-
  data.frame(
    var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
    var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
    date = seq(as.Date("2002-01-01"), by="1 month", length.out=100)
  )

Wie kann ich die beiden Zeitreihen var0 und var1 in derselben Grafik mit date auf der x-Achse mit ggplot2 ? Bonuspunkte, wenn Sie var0 und var1 verschiedene Farben haben und eine Legende enthalten können!

Ich bin sicher, das ist sehr einfach, aber ich kann keine Beispiele dafür finden.


Für eine kleine Anzahl von Variablen können Sie das Diagramm manuell erstellen:

ggplot(test_data, aes(date)) + 
  geom_line(aes(y = var0, colour = "var0")) + 
  geom_line(aes(y = var1, colour = "var1"))

Der generelle Ansatz besteht darin, die Daten in ein langes Format zu konvertieren (mit Hilfe von melt() aus dem Paket reshape oder reshape2 ) oder gather() aus dem tidyr Paket:

library("reshape2")
library("ggplot2")

test_data_long <- melt(test_data, id="date")  # convert to long format

ggplot(data=test_data_long,
       aes(x=date, y=value, colour=variable)) +
       geom_line()


Sie benötigen die Daten für "ggplot2" im Format "groß" statt "breit". "Wide" bedeutet eine Beobachtung pro Zeile mit jeder Variablen als eine andere Spalte (wie Sie jetzt haben). Sie müssen es in ein "hohes" Format umwandeln, in dem Sie eine Spalte haben, die Ihnen den Namen der Variablen und eine andere Spalte mitteilt, die Ihnen den Wert der Variablen mitteilt. Der Prozess des Übergangs von breit nach groß wird gewöhnlich als "Schmelzen" bezeichnet. Sie können tidyr::gather , um Ihren tidyr::gather zu schmelzen:

library(ggplot2)
library(tidyr)

test_data <-
  data.frame(
    var0 = 100 + c(0, cumsum(runif(49, -20, 20))),
    var1 = 150 + c(0, cumsum(runif(49, -10, 10))),
    date = seq(as.Date("2002-01-01"), by="1 month", length.out=100)
  )
test_data %>%
    gather(key,value, var0, var1) %>%
    ggplot(aes(x=date, y=value, colour=key)) +
    geom_line()

Nur um klar zu sein, die data , die ggplot nach dem ggplot via ggplot konsumiert gather aus:

date        key     value
2002-01-01  var0    100.00000
2002-02-01  var0    115.16388 
...
2007-11-01  var1    114.86302
2007-12-01  var1    119.30996

Andries Vermutung ist richtig, +1. Es gibt eine FAQ (siehe vignette("datatable-faq") ), sowie eine neue vignette zum Importieren von data.table .

FAQ 6.9: Ich habe ein Paket erstellt, das von data.table abhängt. Wie stelle ich sicher, dass mein Paket data.table-aware ist, damit die Vererbung von data.frame funktioniert?

Entweder i) schließen Sie data.table in das Feld Depends: Ihrer DESCRIPTION-Datei ein oder ii) data.table in das Feld Imports: Ihrer DESCRIPTION-Datei ein und import(data.table) in Ihre NAMESPACE-Datei.

Weiterer Hintergrund ... Am Anfang von [.data.table (und anderen data.table Funktionen) sehen Sie einen Schalter, der vom Ergebnis eines Aufrufs von cedta() . Dies steht für Calling Environment Data Table Aware. data.table:::cedta verrät, wie es gemacht wird. Es beruht auf dem aufrufenden Paket mit einem Namespace und dem Namespace Import oder Depending auf data.table . Auf diese Weise kann data.table an Nicht- Data.table-aware- Pakete (wie Funktionen in der base ) übergeben werden, und diese Pakete können absolut standardmäßige [.data.frame Syntax in der data.table , ohne sich über die data.frame Klaren zu sein data.frame is() eine data.table .

Dies ist auch der Grund, data.table Vererbung von data.table mit namespaceless Paketen nicht kompatibel war und warum wir auf Anfrage von Benutzern Autoren solcher Pakete bitten mussten, ihrem Paket einen Namespace hinzuzufügen, um kompatibel zu sein. Glücklicherweise ist jetzt, da R einen Standard-Namespace für Pakete hinzufügt, denen eins fehlt (ab v2.14.0), dieses Problem verschwunden:

ÄNDERUNGEN IN R-VERSION 2.14.0
* Alle Pakete müssen einen Namespace haben, und einer wird bei der Installation erstellt, wenn er nicht in den Quellen bereitgestellt wird.





r ggplot2 graph time-series r-faq