Geofacet est une librairie R permettant d’afficher des graphiques sur une grille qui va mimer une disposition géographique. Ainsi dans l’exemple suivant, on a les graphiques d’évolution du chômage dans les états des Etats-Unis, et la disposition imite l’emplacement réel de chaque état.

On va réaliser le geofaceting du chômage par région en France.

La création de ce type de graphique est assez simple … une fois qu’on a les données adequatement rangées dans la bonne structure, comme souvent avec R.

La donnée brute vient du site de l’INSEE, il s’agit d’un fichier Excel avec en ligne les différentes régions, et en colonne les différents trimestres. Pour R, on veut une forme différente, on utilise une dataframe où chaque ligne représente un trimestre et une région:

Si la transformation du document Excel de l’INSEE en dataframe prête au geofaceting n’a rien de sorcier, par souci de simplicité, le CSV ici est déjà formaté, on va l’utiliser dans la suite.

Le code

Les étapes du code sont les suivantes:

  1. Installation et chargement des librairies
  2. Création d’une grille pour la France
  3. Chargement des données
  4. Génération du graphique

    Sys.setlocale("LC_CTYPE", "fr_FR")
    library(ggplot2)
    library(zoo)
    library(xtf)
    library(geofacet)
    
    regions_grid <- data.frame(
    code = c("FR-HDF", "FR-IDF", "FR-NOR", "FR-GES", "FR-BRE", "FR-BFC", "FR-CVL", "FR-PDL", "FR-ARA", "FR-NAQ", "FR-OCC", "FR-PAC", "FR-COR"),
    name = c("Hauts-de-France", "Île-de-France", "Normandie", "Grand Est", "Bretagne", "Bourgogne-Franche-Comté", "Centre-Val de Loire", "Pays de la Loire", "Auvergne-Rhône-Alpes", "Nouvelle-Aquitaine", "Occitanie", "Provence-Alpes-Côte d'Azur", "Corse"),
    row = c(1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5),
    col = c(3, 3, 2, 5, 1, 4, 3, 2, 4, 2, 3, 4, 5),
    stringsAsFactors = FALSE
    )
    geofacet::grid_preview(regions_grid)
    
    setwd(dir="/Users/syldor/Documents/Projects/geofacet")
    
    chomage_df <- read.csv(file="chomage_df.csv", header=T, sep=",", encoding="utf-8")
    chomage_df$trimestre<-as.yearmon(chomage_df$trimestre)
    
    ggplot(chomage_df, aes(trimestre, rate)) +  
    scale_x_continuous(labels=function(x) as.yearmon(x, "%b%y")) + 
    geom_line(color = "steelblue") + facet_geo(~ name, grid=regions_grid) +
    theme_bw() + 
    labs(title = "Taux de chômage par région",
                    caption = "Source: INSEE",
                    x = "Trimestre",
                    y = "Taux de chômage (%)") +
    theme(strip.text.x = element_text(size = 6))

Procédons donc par étapes.

1- Installation et chargement des librairies

La première ligne prépare R a gérer des accents et caractères spéciaux, notamment dans les noms des régions de la grille. En suite on va charcher 4 librairies. Avant de les charger, il convient de les installer si ça n’a jamais été fait, avec les commandes

install.packages(ggplot2)
install.packages(zoo)
install.packages(xtf)
install.packages(geofacet)
  • ggplot2 permet d’utiliser ggplot qui va créer le graphique
  • geofacet permet d’utiliser facet_geo qui va créer la disposition géographique
  • xtf et zoo sont là pour gérer les séries temporelles des trimestres

2- Création de la grille

La librairie geofacet fournit déjà de nombreuses grilles, dont une pour la France qui reprend les régions. On va cependant la recréer pour voir comment ça fonctionne, et il est possible après de proposer sa grille pour qu’elle soit intégrée dans la librairie (celle pour la France a été faite par un géo-développeur français.)

La création de grille se fait via l’application web ici et c’est presque un jeu de puzzle. Après avoir copié collé une liste de régions, on réarrange à la main chacune d’entre elles sur la grille et on génère le code R correspondant. Il n’y a plus qu’a le stocker dans notre variable.

regions_grid <- data.frame(
  code = c("FR-HDF", "FR-IDF", "FR-NOR", "FR-GES", "FR-BRE", "FR-BFC", "FR-CVL", "FR-PDL", "FR-ARA", "FR-NAQ", "FR-OCC", "FR-PAC", "FR-COR"),
  name = c("Hauts-de-France", "Île-de-France", "Normandie", "Grand Est", "Bretagne", "Bourgogne-Franche-Comté", "Centre-Val de Loire", "Pays de la Loire", "Auvergne-Rhône-Alpes", "Nouvelle-Aquitaine", "Occitanie", "Provence-Alpes-Côte d'Azur", "Corse"),
  row = c(1, 2, 2, 2, 2, 2, 3, 3, 3, 4, 4, 4, 5),
  col = c(3, 3, 2, 5, 1, 4, 3, 2, 4, 2, 3, 4, 5),
  stringsAsFactors = FALSE
)

La liste des grilles intégrées à la librairie s’obtient via la commande

get_grid_names()

3- Chargement des données

On charge les données dans une dataframe chomage_df, l’utilisation de la fonction read.csv permet de n’utiliser que des “ comme séparateur et ainsi ne pas avoir de problèmes avec les apostrophes, de même on spécifie l’encodage ‘utf-8’ pour les caractères accentués.

chomage_df <- read.csv(file="chomage_df.csv", header=T, sep=",", encoding="utf-8")

Notre colonne trimestre est chargée comme une colonne de characters, on va la transformer en type `yearmon, qui permet d’ordonner des données du type “mois-année”.

chomage_df$trimestre<-as.yearmon(chomage_df$trimestre)

4- Création du graphique

Le graphique se créer via ggplot. Chaque “+” rajouter des options.

ggplot(chomage_df, aes(trimestre, rate)) + # Chaque graphique a en abscisse trimestre
                                           # et ordonnées rate
  scale_x_continuous(labels=function(x) as.yearmon(x, "%b%y")) + # C'est un graphe continu
                                                                 # et on affiche les absisses
                                                                 # en "Mois Année"
  geom_line(color = "steelblue") + # Ajout d'une couleur bleue à la droite
  facet_geo(~ name, grid=regions_grid) + # groupement par région et placement sur la grille
  theme_bw() + # Quelques couleurs et styles pré-définis
  labs(title = "Taux de chômage par région", # Ajout de titres, infos, etc...
                    caption = "Source: INSEE",
                    x = "Trimestre",
                    y = "Taux de chômage (%)") +
  theme(strip.text.x = element_text(size = 6)) # Taille du texte

Le graphique peut ensuite être généré en image .png, c’est à ce moment là qu’on peut spécifier une largeur suffisante pour que le texte ne se chevauche pas.