Quoi de neuf {ggplot2} ?

Tour d’horizon des nouveautés de ggplot2, version 3.0.0.

ggplot2, version 3.0.0

Accueilli sur le CRAN le 5 juillet, ggplot2 version 3 amène avec lui sa liste de nouveautés. Tour d’horizon de quelques changements.

(Note : évidemment, le code de ce billet ne se reproduit que si vous avez la version 3.0.0 de ggplot2, au minimum).

packageVersion("ggplot2")
## [1] '3.0.0'

Hello tidyeval

La tidyeval, c’est quoi ? Rassures-toi lecteur, si tu n’es pas encore à la page, il est encore temps de te mettre à jour avec notre article « tidyeval », vous avez dit « tidyeval » ?, ou en parcourant le talk de Vincent aux rencontres R.

En clair, la tidyeval permet de programmer de manière non standard, à la manière de {dplyr}.

C’est désormais possible directement dans ggplot2, qui exporte les verbes indispensables depuis {rlang}.

library(ggplot2)
sepal_with <- function(col){
   col <- enquo(col)
   ggplot(iris) + 
        aes(Sepal.Width, !! col) + 
        geom_point()
}
sepal_with(Petal.Length)

Pour les vieux de la vieille de ggplot2 qui utilisaient aes_ et/ou aes_string, cette nouvelle version en tidyeval vient remplacer ces fonctions, qui sont soft-deprecated (mais qui, bonne nouvelle, ne disparaitront pas pour le moment).

Cette introduction de la tidyeval s’est également accompagnée d’une nouvelle écriture pour le facetting, avec vars:

ggplot(iris) +
    aes(Sepal.Length, Sepal.Width) +
    geom_point() +
    facet_grid(rows = vars(Species))

ggplot(iris) +
    aes(Sepal.Length, Sepal.Width) +
    geom_point() +
    facet_grid(cols = vars(Species))

Rassurez-vous, si vous êtes habitués aux formules, elles ne seront pas deprecated : il s’agit “juste” d’une nouvelle façon de l’écrire, plus facile à utiliser avec la tidyeval.

{sf} support

Pour les amoureux de cartographie, {ggplot2} supporte désormais nativement les geom venus de {sf} :

nc <- sf::st_read(system.file("shape/nc.shp", package = "sf"), quiet = TRUE)
ggplot(nc) +
  geom_sf(aes(fill = AREA))

Vous ne connaissez pas encore {sf} ? Sebastien vous en parle dans son article suite aux Rencontres R.

Les deux fonctions supportées par cette nouvelle version étant :

  • geom_sf
  • coord_sf

Hello viridis !

Avant palette de couleur disponible dans un package externe, viridis est aujourd’hui nativement intégré dans {ggplot2}. C’est d’ailleurs la palette par défaut quand on projette des facteurs ordonnés :

diamonds %>%
  dplyr::count(cut, color) %>%
  ggplot() +
  aes(cut, n, fill = color) +
  geom_col()

Les fonctions disponibles nativement sont :

  • scale_color_viridis_c et scale_color_viridis_d, pour les données numériques continues ou discrètes
  • scale_fill_viridis_c et scale_fill_viridis_d, leur contreparie avec fill

Et pour comparer les deux :

ggplot(faithfuld) +
    aes(waiting, eruptions, fill = density) + 
    geom_tile() + 
    scale_fill_viridis_c()

Contre la palette par défaut :

ggplot(faithfuld) +
    aes(waiting, eruptions, fill = density) + 
    geom_tile()  

Plutôt pas mal, non ?

Pour en savoir plus, n’hésitez pas à lire notre article sur rtask : ggplot2 : Welcome viridis !.

Tag ton plot

Si vous avez besoin de faire plusieurs graphes et de les annoter, l’option tag vient de faire son apparition dans labs().

ggplot(iris) +
    aes(Sepal.Width, Sepal.Length) +
    geom_point() +
    labs(tag = "A",
        title = "Iris",
        subtitle = "Sepal.Width, Sepal.Length")

La position de ce tag se gère ensuite avec plot.tag / plot.tag.position :

ggplot(iris) +
    aes(Sepal.Width, Sepal.Length) +
    geom_point() +
    labs(tag = "A",
        title = "Iris",
        subtitle = "Sepal.Width, Sepal.Length") +
    theme(plot.tag.position = "bottomleft")

Les positions possibles étant : topleft, top, topright, left, right, bottomleft, bottom, bottomright. Utiles en cas de génération de plusieurs graphes !

geom_point(shape = “diamond”)

Les fonctions de la famille de geom_point peuvent maintenant recevoir un nom de forme, plutôt qu’uniquement un chiffre :

ggplot(iris) +
    aes(Sepal.Width, Sepal.Length) +
    geom_point(shape = "plus") +
    labs(tag = "A",
        title = "Iris",
        subtitle = "Sepal.Width, Sepal.Length") 

Mais bien sûr, il y a eu plein d’autres changements —pour en savoir plus : ggplot2 News !


À propos de l'auteur

Colin Fay

Colin Fay

Data scientist & R Hacker


Commentaires


À lire également