Plotar várias séries temporais no mesmo gráfico usando ggplot ()

Eu sou relativamente novo em R e estou tentando traçar duas linhas de séries temporais simultaneamente (usando colors diferentes, é claro) fazendo uso de ggplot2.

Eu tenho 2 frameworks de dados. o primeiro tem colunas de ‘alteração percentual para X’ e ‘data’. O segundo também tem as colunas “Alteração percentual para Y” e “Data”, ou seja, ambas possuem uma coluna “Data” com os mesmos valores, enquanto as colunas “Porcentagem de alteração” têm valores diferentes.

Eu gostaria de plotar as colunas ‘Percent Change’ em relação a ‘Date’ (comum a ambos) usando ggplot2 em uma única plotagem.

Os exemplos que encontrei online fizeram uso do mesmo quadro de dados com diferentes variables ​​para conseguir isso, não consegui encontrar nada que faça uso de 2 frameworks de dados para chegar ao enredo. Eu não quero ligar os dois frameworks de dados juntos, quero mantê-los separados. Aqui está o código que estou usando:

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

Mas esse código produz apenas uma linha e eu gostaria de adicionar outra linha em cima dela. Qualquer ajuda seria muito apreciada. TIA.

ggplot permite que você tenha várias camadas, e é isso que você deve aproveitar aqui.

No gráfico criado abaixo, você pode ver que há duas instruções geom_line atingindo cada um dos seus conjuntos de dados e plotando-os juntos em um gráfico. Você pode estender essa lógica se desejar adicionar qualquer outro dataset, plotagem ou até mesmo resources do gráfico, como os labels dos eixos.

 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') 

Se ambos os frameworks de dados tiverem os mesmos nomes de coluna, você deverá adicionar um quadro de dados dentro da chamada ggplot() e também nomear os valores x e y dentro da aes() da chamada ggplot() . Em seguida, adicione primeiro geom_line() para a primeira linha e inclua a segunda chamada geom_line() com data=df2 (em que df2 é seu segundo quadro de dados). Se você precisar de linhas em colors diferentes, adicione color= e nome para a linha eahc dentro de aes() de cada geom_line() .

 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") 

insira a descrição da imagem aqui

Eu prefiro usar a biblioteca ggfortify . É um wrapper ggplot2 que reconhece o tipo de object dentro da function autoplot e escolhe os melhores methods ggplot para plotar. Pelo menos eu não tenho que lembrar a syntax do ggplot2.

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

Enredo

Eu sei que isso é velho, mas ainda é relevante. Você pode tirar proveito de reshape2 :: melt para mudar o dataframe para uma estrutura mais amigável para ggplot2.

Vantagens:

  • permite traçar qualquer número de linhas
  • cada linha com uma cor diferente
  • adiciona uma legenda para cada linha
  • com apenas uma chamada para ggplot / geom_line

Desvantagem:

  • um pacote extra (reshape2) necessário
  • derreter não é tão intuitivo no início

Por exemplo:

 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() 

insira a descrição da imagem aqui

Uma alternativa é vincular os frameworks de dados e designá-los ao tipo de variável que eles representam. Isso permitirá que você use o dataset completo de maneira mais organizada

 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()