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")
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)
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:
Desvantagem:
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()
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()