Je suis assez nouveau pour R et tente de tracer simultanément deux lignes de série temporelle (en utilisant des couleurs différentes, bien sûr) en utilisant ggplot2.
J'ai 2 cadres de données. la première contient les colonnes "Changement en pourcentage pour X" et "Date". La seconde contient également les colonnes «Changement en pourcentage pour Y» et «Date», c’est-à-dire qu’elles ont toutes les deux une colonne «Date» avec les mêmes valeurs, tandis que les colonnes «Changement en pourcentage» ont des valeurs différentes.
Je voudrais tracer les colonnes "Changement en pourcentage" par rapport à "Date" (commune aux deux) en utilisant ggplot2 sur un même tracé.
Les exemples que j'ai trouvés en ligne utilisaient le même cadre de données avec différentes variables pour y parvenir. Je n'ai pas été en mesure de trouver quoi que ce soit qui utilise deux cadres de données pour obtenir l'intrigue. Je ne veux pas lier les deux trames de données, je veux les garder séparées. Voici le code que j'utilise:
ggplot(jobsAFAM, aes(x=jobsAFAM$data_date, y=jobsAFAM$Percent.Change)) + geom_line() +
xlab("") + ylab("")
Mais ce code ne produit qu'une ligne et je voudrais ajouter une autre ligne dessus . Toute aide serait très appréciée . TIA.
ggplot
vous permet d’avoir plusieurs couches, et c’est ce dont vous devriez tirer avantage ici.
Dans le graphique créé ci-dessous, vous pouvez constater que deux instructions geom_line
touchent chacun de vos ensembles de données et les tracent ensemble sur un graphique. Vous pouvez étendre cette logique si vous souhaitez ajouter un autre jeu de données, un tracé ou même des fonctionnalités du graphique telles que les étiquettes d'axe.
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')
Si les deux cadres de données ont les mêmes noms de colonne, vous devez ajouter un cadre de données dans l'appel ggplot()
et nommer les valeurs x et y dans l'appel aes()
de ggplot()
. Ajoutez ensuite la première geom_line()
pour la première ligne et le deuxième appel geom_line()
avec data=df2
(où df2 est votre deuxième trame de données). Si vous avez besoin de lignes de couleurs différentes, ajoutez color=
et le nom de chaque ligne dans aes()
de chaque 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")
Je préfère utiliser la bibliothèque ggfortify
. C'est un wrapper ggplot2
qui reconnaît le type d'objet dans la fonction autoplot et choisit les meilleures méthodes de ggplot à tracer. Au moins, je n'ai pas à me souvenir de la syntaxe de ggplot2.
library(ggfortify)
ts1 <- 1:100
ts2 <- 1:100*0.8
autoplot(ts( cbind(ts1, ts2) , start = c(2010,5), frequency = 12 ),
facets = FALSE)
Je sais que c'est vieux mais c'est toujours pertinent. Vous pouvez tirer parti de reshape2 :: melt pour changer le cadre de données en une structure plus conviviale pour ggplot2.
Avantages:
Désavantage:
Par exemple:
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()
Une alternative consiste à lier les images et à leur attribuer le type de variable qu’elles représentent. Cela vous permettra d'utiliser l'ensemble de données complet d'une manière plus ordonnée
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()