Il m’arrive souvent de fouiller dans mes fichiers pour tenter de retrouver un code R pour produire un graphique, ou manipuler des formats (comme par exemple des dates). Un moyen rapide de retrouver les informations serait de publier mes code sur ce blog. Il est même possible que certaines personnes puissent y trouver un léger intérêt. C’est pourquoi je souhaite commencer une série d’articles intitulés “Pense-bête R”, qui sera alimentée à chaque fois que je rencontrerai un cas de figure sous R que je risque de rencontrer à nouveau.

Pour ce premier volet, je vais y aller en douceur, avec la production d’un graphique sur lequel apparaissent deux courbes. À chaque fois que je manipule des données temporelles, je recherche le bout de code me permettant de visualiser deux séries sur un même graphique.

Plutôt que de simuler des données, je vais en profiter pour utiliser la fonction getSymbols du package quantmod. J’ai pris les séries au hasard, en faisant juste attention à avoir la même échelle.

Le graphique produit n’est certainement pas le plus esthétique qu’il soit, mais il permet de s’amuser avec plusieurs options que je suis amené à modifier.

library(quantmod)
getSymbols(c("FRAURAMS", "UNRATE"),src = "FRED")

library(ggplot2)
library(scales)

# Un affichage sympa propose d'office
plot(FRAURAMS)

# Adjusted Unemployment Rate in France
fra <- data.frame(date = index(FRAURAMS), unRate = as.vector(FRAURAMS))
fra$country <- "France"

# Civilian Unemployment Rate (USA)
# On va prendre la meme date de debut que pour la france
UNRATE <- UNRATE[paste(min(fra$date), "/", sep = "")]
usa <- data.frame(date = index(UNRATE), unRate = as.vector(UNRATE))
usa$country <- "USA"

# On met les donnees dans une seule data frame
df <- rbind(fra, usa)
P <- ggplot() +
  # On trace la ligne
  geom_line(data = df, aes(x = date, y = unRate, colour = country, shape = country)) +
  # On ajoute des points
  geom_point(data = df, aes(x = date, y = unRate, colour = country, shape = country), size = 2.5) +
  # Ajouter un element de texte
  geom_text(data = NULL, aes(x = as.Date("2013-06-01"), y = 4.5, label = "Source : FRED")) +
  # Ajouter une blande bleue entre 2009 et 2011
  geom_rect(aes(NULL,NULL,
                xmin = as.Date("2009-01-01"), xmax = as.Date("2011-01-01"),
                ymin = -Inf, ymax = +Inf,
                colour = NULL),
            fill = 'dodger blue', alpha = 0.2, show_guide = FALSE) +
  # Changer les positions de l'echelle des abscisses
  scale_x_date(labels= date_format("%Y"), breaks = date_breaks("year")) +
  # Ajouter une ligne horizontale en pointilles
  geom_hline(aes(yintercept = 9), colour = "#C77CFF", linetype = 2, size = 1.5) +
  # Changer le titre de l'axe des abscisses
  xlab("Date") +
  # Changer le titre de l'axe des ordonnees
  ylab("Pourcentage") +
  # Ajouter un titre
  ggtitle("Taux de chomage") +
  # Changer le titre de la legende et les couleurs
  scale_colour_manual(name = "Pays", values = c("#00BA38", "#619CFF")) +
  # On doit egalement changer le nom pour les formes
  scale_shape_discrete(name = "Pays") +
  # Coin haut-gauche de la legende en haut a gauche du graphique
  # Ecritures plus grandes
  theme(legend.justification = c(0, 1),
        legend.position = c(0, 1),
        text = element_text(size = 20))
P

Deux séries temporelles avec ggplot2

2 thoughts on “Pense-bête R #1 (deux courbes sur un graph)

  1. Bonjour, j’étais ravie de trouver un pense bete tout fait pour solutionner mon problème mais….R m’affiche une erreur que je ne comprends pas…je voudrais vraiment utiliser ggplot et pas lattice ni matplot mais je suis coincée malgré votre pense bete très détaillé!!! help!

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.