Graphiques à bulles sous R

L'essentiel de cette page !

On peur réaliser facilement des graphiques à bulles avec R, de qualité correct avec la fonction symbols().

On peut aussi faire du très joli avec {ggplot2}.

Simulons des données

Pays <- c("Afrique du sud","Allemagne","Arabie Saoudite","Argentine",

"Australie","Autriche","Belgique","Brésil","Canada","Chili",

"Chine","Colombie","Corée du sud","Danemark","Egypte",

"Emirats Arabes Unis","Espagne","Estonie","Etats-Unis","Finlande",

"France","Georgie","Grèce","Hongrie","Inde","Irlande","Israel","Italie",

"Japon","Malaisie","Mexique","Norvège","Nouvelle Zélande","Pakistan",

"Pays-bas","Pays-Bas","Pérou","Pologne","Portugal","République Tchèque",

"Royaume-Uni","Russie","Singapour","Suède","Suisse","Taïwan","Thaïlande",

"Turquie","Ukraine")

Pays <- as.factor(Pays)

Régions <- c("Amérique","Europe","Amérique","Amérique latine","Asie","Europe",

"Europe","Amérique latine","NA","Amérique latine","Asie","Amérique latine",

"Asie","Europe","Amérique","Amérique","Europe","Europe de l'est","NA","Europe",

"Europe","Europe de l'est","Europe","Europe de l'est","Asie","Europe","Amérique",

"Europe","Asie","Asie","Amérique latine","Europe","Asie","Asie","Europe","Europe",

"Amérique latine","Europe de l'est","Europe","Europe de l'est","Europe","Europe de l'est",

"Asie","Europe","Europe","Asie","Asie","Europe de l'est","Europe de l'est")

Régions <- as.factor(Régions)

x <- rnorm(length(Pays),20,5)

y <- rnorm(length(Pays),20,5)

tailles <- rnorm(length(Pays),20,5)

radius <- sqrt(tailles/(2*pi))

library("colorspace")

pal <- choose_palette()

symbols(x,y, circles=radius,

bg=pal(6)[Régions],inches=0.35)

Bubble chart avec ggplot2

Compilons ces données en dataframes

Il faut reprendre les données simulées ci-dessus.

synthese <- data.frame(Pays,Régions,x,y,tailles)

Traçons le graphique avec ggplot2 et les labels avec ggrepel

library("ggplot2") ; library("ggrepel")

ggplot(synthese , aes(x, y)) + geom_point(aes(color = Régions, size = tailles), alpha = 0.5) +

geom_label_repel(aes(label = Pays, color = Régions), size = 3) + scale_size(range = c(0.5, 12))