wake-up-neo.net

Mehrere Zeitreihen in derselben Grafik mit ggplot () plotten

Ich bin relativ neu in R und versuche, zwei Zeitreihenzeilen gleichzeitig zu zeichnen (natürlich mit verschiedenen Farben), wobei ggplot2 verwendet wird. 

Ich habe 2 Datenrahmen. Die erste hat die Spalten "Prozent" für "X" und "Datum". Die zweite Spalte enthält ebenfalls die Spalten "Prozent" für "Y" und "Datum", d. H. Beide haben eine Spalte "Datum" mit den gleichen Werten, während die Spalten "Prozent" unterschiedliche Werte haben. 

Ich möchte die 'Percent Change'-Spalten gegen' Date '(gemeinsam für beide) mit ggplot2 in einer einzigen Grafik darstellen. 

Bei den Beispielen, die ich online gefunden habe, wurden dieselben Datenrahmen mit verschiedenen Variablen verwendet, um dies zu erreichen. Ich konnte nichts finden, das zwei Datenrahmen verwendet, um zur Grafik zu gelangen. Ich möchte die beiden Datenrahmen nicht miteinander verbinden, ich möchte sie getrennt halten. Hier ist der Code, den ich verwende:

ggplot(jobsAFAM, aes(x=jobsAFAM$data_date, y=jobsAFAM$Percent.Change)) + geom_line() +
  xlab("") + ylab("")

Dieser Code erzeugt jedoch nur eine Zeile, und ich würde gerne eine weitere Zeile hinzufügen . Jede Hilfe wäre sehr dankbar TIA.

34
Patthebug

ggplot ermöglicht es Ihnen, mehrere Ebenen zu haben, und davon sollten Sie hier profitieren.

In dem unten erstellten Diagramm können Sie sehen, dass es zwei geom_line-Anweisungen gibt, die jedes Ihrer Datensätze treffen und sie zusammen in einem Diagramm darstellen. Sie können diese Logik erweitern, wenn Sie andere Datensätze, Diagramme oder sogar Merkmale des Diagramms hinzufügen möchten, beispielsweise die Achsenbeschriftungen.

library(ggplot2)

jobsAFAM1 <- data.frame(
  data_date = runif(5,1,100),
  Percent.Change = runif(5,1,100)
)

jobsAFAM2 <- data.frame(
  data_date = runif(5,1,100),
  Percent.Change = runif(5,1,100)
)

ggplot() + 
  geom_line(data = jobsAFAM1, aes(x = data_date, y = Percent.Change), color = "red") +
  geom_line(data = jobsAFAM2, aes(x = data_date, y = Percent.Change), color = "blue") +
  xlab('data_date') +
  ylab('percent.change')
81
TheComeOnMan

Wenn beide Datenrahmen die gleichen Spaltennamen haben, sollten Sie einen Datenrahmen in den Aufruf ggplot() und auch die Werte für x und y innerhalb von aes() des Aufrufs ggplot() einfügen. Fügen Sie dann die erste geom_line() für die erste Zeile hinzu und fügen Sie den zweiten geom_line()-Aufruf mit data=df2 hinzu (wobei df2 Ihr zweiter Datenrahmen ist). Wenn Sie Zeilen in verschiedenen Farben benötigen, fügen Sie color= und den Namen für die eahc-Zeile in aes() jeder geom_line() hinzu.

df1<-data.frame(x=1:10,y=rnorm(10))
df2<-data.frame(x=1:10,y=rnorm(10))

ggplot(df1,aes(x,y))+geom_line(aes(color="First line"))+
  geom_line(data=df2,aes(color="Second line"))+
  labs(color="Legend text")

enter image description here

37
Didzis Elferts

Ich bevorzuge die ggfortify-Bibliothek. Es ist ein ggplot2-Wrapper, der den Objekttyp in der Autoplot-Funktion erkennt und die besten ggplot-Methoden zum Plotten auswählt. Zumindest muss ich mich nicht an die Syntax von ggplot2 erinnern.

library(ggfortify)
ts1 <- 1:100
ts2 <- 1:100*0.8
autoplot(ts( cbind(ts1, ts2)  , start = c(2010,5), frequency = 12 ),
         facets = FALSE)

Plot

5
Marcelo Ruas

Ich weiß, das ist alt, aber es ist immer noch relevant. Sie können reshape2 :: melt nutzen, um den Datenrahmen in eine freundlichere Struktur für ggplot2 zu ändern. 

Vorteile:

  • ermöglicht das Zeichnen einer beliebigen Anzahl von Zeilen
  • jede Zeile mit einer anderen Farbe
  • fügt eine Legende für jede Zeile hinzu
  • mit nur einem Aufruf von ggplot/geom_line

Nachteil:

  • ein zusätzliches Paket (reshape2) ist erforderlich
  • schmelzen ist zunächst nicht so intuitiv

Zum Beispiel:

jobsAFAM1 <- data.frame(
  data_date = seq.Date(from = as.Date('2017-01-01'),by = 'day', length.out = 100),
  Percent.Change = runif(5,1,100)
)

jobsAFAM2 <- data.frame(
  data_date = seq.Date(from = as.Date('2017-01-01'),by = 'day', length.out = 100),
  Percent.Change = runif(5,1,100)
)

jobsAFAM <- merge(jobsAFAM1, jobsAFAM2, by="data_date")

jobsAFAMMelted <- reshape2::melt(jobsAFAM, id.var='data_date')

ggplot(jobsAFAMMelted, aes(x=data_date, y=value, col=variable)) + geom_line()

 enter image description here

2
Chris Njuguna

Alternativ können Sie die Datenrahmen binden und ihnen den Typ der Variablen zuweisen, die sie repräsentieren. Auf diese Weise können Sie den gesamten Datensatz auf eine tidier-Weise verwenden.

library(ggplot2)
library(dplyr)

df1 <- data.frame(dates = 1:10,Variable = rnorm(mean = 0.5,10))
df2 <- data.frame(dates = 1:10,Variable = rnorm(mean = -0.5,10))

df3 <- df1 %>%
  mutate(Type = 'a') %>%
  bind_rows(df2 %>%
              mutate(Type = 'b'))


ggplot(df3,aes(y = Variable,x = dates,color = Type)) + 
  geom_line()
0
JLoria