Eine sehr neue Frage, aber sagen Sie, ich habe Daten wie diese:
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 sowohl Zeitreihen var0
als auch var1
auf demselben Diagramm mit date
auf der x-Achse zeichnen ggplot2
? Bonuspunkte, wenn Sie var0
und var1
verschiedene Farben machen, und können eine Legende enthalten!
Ich bin mir sicher, dass dies sehr einfach ist, aber ich kann da draußen keine Beispiele finden.
colour=
als Variablenname verwenden.colour='var_names'
wie von hadley angegeben funktioniert gut. aber @DaveX - wäre spezifischer, wenn man bestimmte Farben auswählen möchte, anstatt automatisch von der Funktion ausgewählte Farben.Der allgemeine Ansatz besteht darin, die Daten in ein Langformat (unter Verwendung
melt()
von Paketreshape
oderreshape2
) odergather()
/pivot_longer()
vontidyr
Paket zu konvertieren :Siehe auch diese Frage zum Umformen von Daten von breit nach lang.
quelle
gather()
Funktion destidyr
Pakets verwenden, um die Daten zu schmelzen:gather(test_data, variable, value, -date)
Sie müssen die Daten für "ggplot2" im Format "groß" anstelle von "breit" haben. "breit" bedeutet, eine Beobachtung pro Zeile mit jeder Variablen als einer anderen Spalte zu haben (wie Sie es jetzt getan haben). Sie müssen es in ein "hohes" Format konvertieren, in dem Sie eine Spalte mit dem Namen der Variablen und eine weitere Spalte mit dem Wert der Variablen haben. Der Übergang von breit nach hoch wird üblicherweise als "Schmelzen" bezeichnet. Sie können verwenden
tidyr::gather
, um Ihren Datenrahmen zu schmelzen:Nur um klar zu sein,
data
dass derggplot
Verbrauch nach dem Weiterleitengather
wie folgt aussieht:quelle
Verwenden Sie Ihre Daten:
Ich erstelle eine gestapelte Version, mit der ich arbeiten
ggplot()
möchte:In diesem Fall war das Produzieren
stacked
recht einfach, da wir nur ein paar Manipulationen durchführen mussten, aberreshape()
dasreshape
undreshape2
könnte nützlich sein, wenn Sie einen komplexeren realen Datensatz zum Manipulieren haben.Sobald die Daten in dieser gestapelten Form vorliegen, ist nur ein einfacher
ggplot()
Aufruf erforderlich , um das gewünschte Diagramm mit allen Extras zu erstellen (ein Grund, warum übergeordnete Diagrammpakete so nützlich sindlattice
undggplot2
sind):Ich überlasse es Ihnen, die Achsenbeschriftungen, den Legendentitel usw. aufzuräumen.
HTH
quelle
rep()
, also bekommen wir wirklich nur 3 Spalten reinstacked
. Ich werde den Code bearbeiten, um den Einzug klarer zu machen.melt()
ist gut aufgenommen, und ich stelle fest, dass das Paket umformen [2] hier nützlich wäre. Ich bin mit reshape2 nicht so vertraut und für eine so einfache Manipulation von Hand ist es komplexer als ein Aufrufmelt()
, es war weniger Aufwand, da ich nicht lesen musste, wie man es benutztmelt()
. Und rcs schlich sich mit seiner Antwort ein, während ich meine produzierte; Als ich mit der Antwort anfing, gab es keine Antworten. mehr als eine Möglichkeit, eine Katze zu häuten - wie sie sagen! ;-)Ich bin auch neu in R, aber ich versuche zu verstehen, wie ggplot funktioniert. Ich glaube, ich bekomme einen anderen Weg, es zu tun. Ich teile nur wahrscheinlich nicht als vollständige perfekte Lösung, sondern um einige verschiedene Sichtweisen hinzuzufügen.
Ich weiß, dass ggplot besser für die Arbeit mit Datenrahmen geeignet ist, aber manchmal kann es auch nützlich sein zu wissen, dass Sie zwei Vektoren direkt zeichnen können, ohne einen Datenrahmen zu verwenden.
Daten werden geladen. Die ursprüngliche Länge des Datumsvektors beträgt 100, während var0 und var1 die Länge 50 haben, sodass ich nur die verfügbaren Daten (die ersten 50 Daten) zeichne.
Plotten
In diesem Format konnte ich jedoch keine korrekte Legende hinzufügen. Weiß jemand wie?
quelle
ggplot() + geom_line(aes(x=date,y=var0, group=1, colour = 'red')) + geom_line(aes(x=date,y=var1, group = 2, colour = 'blue')) + ylab('Values')+xlab('date')