Comment créer un graphique en sucette dans R



Semblable à un graphique à barres, un graphique en sucette est utile pour comparer les valeurs quantitatives d’une variable catégorielle. Au lieu d’utiliser des barres, un graphique en sucette utilise des lignes avec des cercles à l’extrémité pour représenter les valeurs quantitatives.

Un graphique en sucette est un excellent moyen de comparer plusieurs catégories tout en minimisant la quantité de couleur sur le graphique et en attirant l’attention du lecteur sur les valeurs réelles du graphique par opposition aux lignes ou autres graphiques du graphique. De nombreuses personnes considèrent également que le tableau en sucette est esthétique.

Dans ce didacticiel, nous passerons en revue les étapes nécessaires pour créer le graphique en sucette suivant :

Exemple : graphique Lollipop dans R

Pour cet exemple, nous utiliserons l’ensemble de données R intégré mtcars :

#view first six rows of mtcars
head(mtcars)

Un graphique de base en sucette

Le code suivant illustre comment   pour créer un graphique en sucette pour comparer les mpg (miles par gallon) de chacune des 32 voitures de l’ensemble de données.

Les noms des voitures sont définis dans les noms de lignes de l’ensemble de données, nous créons donc d’abord une nouvelle colonne dans l’ensemble de données qui contient ces noms de lignes.

Ensuite, nous chargeons la bibliothèque ggplot2 , que nous utiliserons pour créer le graphique en sucette.

Avec ggplot2, nous utilisons geom_segment pour créer les lignes sur le tracé. Nous définissons les valeurs x de début et de fin comme 0 et mpg , respectivement. Nous définissons les valeurs y de début et de fin comme car :

#create new column for car names
mtcars$car <- row.names(mtcars)

#load ggplot2 library
library(ggplot2)

#create lollipop chart
ggplot(mtcars, aes(x = mpg, y = car)) +
        geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) +
        geom_point()

Ajout d’étiquettes

Nous pouvons également ajouter des étiquettes au graphique en utilisant les arguments label et geom_text :

ggplot(mtcars, aes(x = mpg, y = car, label = mpg)) +
        geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) +
        geom_point() +
        geom_text(nudge_x = 1.5)

Ou au lieu de placer les étiquettes à la fin de chaque ligne, nous pourrions les placer à l’intérieur des cercles eux-mêmes en agrandissant les cercles et en changeant la couleur de la police de l’étiquette en blanc :

ggplot(mtcars, aes(x = mpg, y = car, label = mpg)) +
        geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) +
        geom_point(size = 7) +
        geom_text(color = 'white', size = 2)

Comparer les valeurs à une moyenne

Nous pouvons également utiliser un graphique en sucette pour comparer les valeurs à un nombre spécifique. Par exemple, nous pouvons trouver la valeur moyenne du mpg dans l’ensemble de données, puis comparer le mpg de chaque voiture à la moyenne.

Le code suivant utilise la bibliothèque dplyr pour trouver la valeur moyenne de mpg , puis organiser les voitures par ordre croissant de mpg :

#load library dplyr
library(dplyr)

#find mean value of mpg and arrange cars in order by mpg descending
mtcars_new <- mtcars %>%
                arrange(mpg) %>%
                mutate(mean_mpg = mean(mpg),
                       flag = ifelse(mpg - mean_mpg > 0, TRUE, FALSE),
                       car = factor(car, levels = .$car))

#view first six rows of mtcars_new
head(mtcars_new)

Ensuite, le code suivant crée le graphique en sucette en définissant la couleur du cercle comme étant égale à la valeur du drapeau (dans ce cas, VRAI ou FAUX) et la valeur x de départ pour chaque voiture est égale à la valeur moyenne de mpg .

ggplot(mtcars_new, aes(x = mpg, y = car, color = flag)) +
        geom_segment(aes(x = mean_mpg, y = car, xend = mpg, yend = car)) +
        geom_point()

En utilisant ce type de palette de couleurs, nous pouvons facilement déterminer quelles voitures ont un mpg inférieur et supérieur à la moyenne de l’ensemble de données.

Par défaut, R utilise le bleu et le rouge comme couleurs du graphique. Cependant, nous pouvons utiliser toutes les couleurs que nous souhaitons en utilisant l’argument scale_colour_manual :

ggplot(mtcars_new, aes(x = mpg, y = car, color = flag)) +
        geom_segment(aes(x = mean_mpg, y = car, xend = mpg, yend = car)) +
        geom_point() +
        scale_colour_manual(values = c("purple", "blue"))

Modifier l’esthétique du graphique

Enfin, nous pouvons utiliser les larges capacités de ggplot2 pour modifier davantage l’esthétique du graphique et créer un produit final d’aspect professionnel :

ggplot(mtcars_new, aes(x = mpg, y = car, color = flag)) +
        geom_segment(aes(x = mean_mpg, y = car, xend = mpg, yend = car), color = "grey") +
        geom_point() +
        annotate("text", x = 27, y = 20, label = "Above Average", color = "#00BFC4", size = 3, hjust = -0.1, vjust = .75) +
        annotate("text", x = 27, y = 17, label = "Below Average", color = "#F8766D", size = 3, hjust = -0.1, vjust = -.1) +
        geom_segment(aes(x = 26.5, xend = 26.5, y = 19, yend = 23),
                     arrow = arrow(length = unit(0.2,"cm")), color = "#00BFC4") +
        geom_segment(aes(x = 26.5, xend = 26.5 , y = 18, yend = 14),
                     arrow = arrow(length = unit(0.2,"cm")), color = "#F8766D") +
        labs(title = "Miles per Gallon by Car") +
        theme_minimal() +
        theme(axis.title = element_blank(),
              panel.grid.minor = element_blank(),
              legend.position = "none",
              text = element_text(family = "Georgia"),
              axis.text.y = element_text(size = 8),
              plot.title = element_text(size = 20, margin = margin(b = 10), hjust = 0),
              plot.subtitle = element_text(size = 12, color = "darkslategrey", margin = margin(b = 25, l = -25)),
              plot.caption = element_text(size = 8, margin = margin(t = 10), color = "grey70", hjust = 0))

Ajouter un commentaire

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