Visualiser des flux : les graphiques circulaires

On a récemment porté à mon attention cette visualisation de flux orientés plutôt réussie.

Comment lire ces graphiques :

L’idée de base de ce graphique est de montrer simultanément les tailles relatives des flux entre les régions. Les origines et les destinations des flux sont représentés par les segments du cercle […]. La taille des flux est indiquée par la largeur des liens à leurs extrémités. La direction du flux est encodé à la fois par la couleur du lien (celle de la région d’origine) et par l’espace entre le lien et la région de destination.Source

En cherchant un (tout petit) peu j’ai retrouvé ce post qui montre comment réaliser ces graphiques circulaires avec R. L’auteur met a disposition ses exemples au sein du package migest qui s’appuie lui même sur des fonctions du package circlize.

Pour faciliter la création de ces « graphiques circulaires » j’ai construit une fonction unique qui comprend à la fois la préparation des données et l’affichage du graphique.

Les données et codes utilisés sont disponibles sur Github. 1

Pour illustrer l’utilisation de cette fonction je propose un exemple basé sur les migrations résidentielles entre régions françaises (les données utilisées sont les mêmes que celles utilisées ici) :

load("data/regmig.RData")
source("CircularPlot.R")
myCirclePlot(df = df, marg = 0.25, nflows = 40)

Dans la fonction myCirclePlot :
df est un data frame des liens entre les régions. Il est composé de 3 colonnes : origine (région d’origine), destination (région de destination), taille du flux (nombre de migrations résidentielles).
marg est un paramètre à ajuster en fonction de la taille des labels des régions et de la taille du graphique (une valeur entre 0 et 0.4).
nflows est le nombre de liens à afficher sur le graphique.

Cliquer sur l'image pour l'agrandir
Cliquer sur l’image pour l’agrandir

Les migrations en provenance de l’étranger apparaissent prépondérantes sur ce graphiques (nous de disposons pas des migrations résidentielles vers l’étranger).
Le graphique suivant ne prend pas en compte les migrations résidentielles venant de l’étranger.

df2 <- df[df$i!='ETRANGER' & df$j!='ETRANGER',]
myCirclePlot(df = df2, marg = 0.25, nflows = 40)
Cliquer sur l'image pour l'agrandir
Cliquer sur l’image pour l’agrandir

Les migrations résidentielles intra-régionales sont maintenant celles les plus visibles.
Le graphique suivant ne considère que les migrations inter-régionales.

df3 <- df2[df2$i!=df2$j,]
myCirclePlot(df = df3, marg = 0.25, nflows = 40)
Cliquer sur l'image pour l'agrandir
Cliquer sur l’image pour l’agrandir

Les principales migrations inter-régionales se font entre régions contiguës et en provenance ou vers l’Île-de-France.

Les problèmes inhérents à ce type de graphique :
– Il est difficile de conserver un graphique lisible en représentant de trop nombreuses origines et destinations
– Même remarque si l’on veut montrer un grand nombre de flux.
La solution de l’interactivité est particulièrement adaptée ici (voir l’exemple initial : http://www.global-migration.info/.

Les problèmes du code présenté ici :
– En fonction des proportions de la sortie graphique et de l’hétérogénéité des longueurs des labels régions le graphique peut apparaître plus ou moins ovale.
– La couleur des liens n’est pas gérée ici, un jeu de couleurs aléatoires est affecté à chaque nouveau graphique ce qui ne facilite pas les comparaisons.

Références :
Le site à l’origine de tout cela – The global flow of people
Le working paper montrant comment réaliser ce type de graphique sur plusieurs plate-formes – Visualising Migration Flow Data with Circular Plots
L’exemple spécifique avec R – Circular Migration Flow Plots in R

——-
(1)J’ai été fortement incité à utiliser github. Je m’exécute mais je continuerai à mettre des codes courts directement dans les billets.


Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *