Fonctionnalités du package ggiraph

Audrey-Maude Chiasson et Nicolas Larrouy

2018-05-11



Introduction

Le logiciel R est un logiciel complet offrant un grand nombre de fonctions et de packages permettant, entre autres, de manipuler et d’analyser des données statistiques. L’utilisation de graphiques est parfois indispensable pour l’interprétation de certains résultats et, en ce sens, le package ggplot2, que nous avons déjà vu, est un outil très intéressant pour la production de tels graphiques.

Dans les faits, le package ggplot2 est un outil bien connu qui permet à son utilisateur de créer de jolis graphiques et ainsi de permettre la visualisation de données statiques.

Toutefois, dans certains cas, il est serait préférable d’obtenir un graphique interactif plutôt qu’un simple graphique statique. C’est l’idée qu’à voulu amener David Gohel en développant l’extension ggiraph du package ggplot2.

Définition

Le package ggiraph est en fait un outil permettant d’animer un graphique existant, que ce soit un diagramme à barres, un graphique de dispersion, un diagramme en boite à moustache, ou tout autre type de graphique.

En utilisant les fonctions geom(), ggiraph permet de produire trois types d’animation, à partir des arguments suivants :

  • tooltip: permet l’ajout d’infobulles qui s’affichent lorsque l’utilisateur glisse la souris sur un élément du graphique.
  • onclick: effectue une action javascript (ouvrir une page internet, par exemple) lorsque l’utilisateur clique sur un un élément du graphique.
  • data_id: Permet de mettre en surbrillance des données du graphique lorsque l’utilisateur passe le curseur sur ces données.

Utilisation du package ggiraph

Évidemment, puisque le package ggiraph est, comme mentionné, une extension du package ggplot2, il est impératif de télécharger les librairies suivante :

library(`ggplot2`)
#install.packages("ggiraph")
library(ggiraph)

Le package ggiraph permet de créer des graphiques interactifs à partir de graphiques de ggplot2. L’utilisateur n’a qu’à créer son graphique, y ajouter une fonction geom et initialiser l’interactivité par la fonction ggiraph().

Comme mentionné, l’utilisation des différentes fonctions geom sont primordiale pour activer l’interaction des graphiques à partir de la fonction ggiraph(). L’utilisation de fonction geom dépend en fait du type de graphique que l’utilisateur souhaite animer. Voici les différentes fonctions geom avec leurs graphiques associés:

  • geom_bar_interactive() pour les diagrammes en barre
  • geom_boxplot_interactive() pour les diagrammes en boîte à moustaches
  • geom_histogram_interactive() pour les histogrammes

Et d’autre pour des graphiques moins usuels, tels :

  • geom_line_interactive()
  • geom_map_interactive()
  • geom_path_interactive()
  • geom_point_interactive()
  • geom_polygon_interactive()
  • geom_rect_interactive()
  • geom_segment_interactive()
  • geom_text_interactive()
  • geom_tile_interactive()

Afin d’illustrer les différents résultats possible par le package étudié, nous utiliserons le jeu de données quakes2 qui est en fait les 500 premières lignes du jeu quakes, provenant du package datasets. Comme ce jeu de données se prête bien aux graphiques de type nuage de points, nous utiliserons la fonction geom_point_interactive()et nous présenterons différentes animations que propose le package ggiraph à partir d’un seul et même graphique. Nous présenterons par la suite quelques exemples similaires avec d’autres types de graphiques afin d’illustrer les effets intéressants que peut amener un travail avec ggiraph.

Débutons donc par d’abord importer le jeu de données sur lequel nous travaillerons :

# Création d'un facteur à partir de la variable mag
quakes$magFactor <- factor(floor(quakes$mag))
# Création d'un deuxième facteur à partir des variables lat et long 
quakes$region <- factor(quakes$long >= 175, labels = c("Ouest", "Est"))

quakes2 <- quakes[1:500,]
# Pour des soucis de clarté, nous n'utilisons que les 500 premières lignes de quakes.
str(quakes2)
## 'data.frame':    500 obs. of  7 variables:
##  $ lat      : num  -20.4 -20.6 -26 -18 -20.4 ...
##  $ long     : num  182 181 184 182 182 ...
##  $ depth    : int  562 650 42 626 649 195 82 194 211 622 ...
##  $ mag      : num  4.8 4.2 5.4 4.1 4 4 4.8 4.4 4.7 4.3 ...
##  $ stations : int  41 15 43 19 11 12 43 15 35 19 ...
##  $ magFactor: Factor w/ 3 levels "4","5","6": 1 1 2 1 1 1 1 1 1 1 ...
##  $ region   : Factor w/ 2 levels "Ouest","Est": 2 2 2 2 2 2 1 2 2 2 ...

Ce jeu de données contient des mesures décrivant des tremblements de terres survenus près des Îles Fidji depuis 1964.

1 Infobulle (tooltip)

1.1 Fonction générale

Voyons donc la première animation possible avec ggiraph; l’infobulle. Cette animation permet à l’utilisateur de voir une “bulle” apparaître lorsqu’il passe le curseur sur un point du graphique. Cette bulle peut contenir toute sorte d’information qui permettrait à l’utilisateur de mieux comprendre le point qu’il est en train d’observer, comme les coordonnées x et y exactes, entre autres.

Prenons un exemple :

library(`ggplot2`)
g <- ggplot(quakes2, aes(x = long, y = lat, color = depth)) + 
  coord_quickmap() # coord_quickmap() permet d'avoir des axes sur la même échelle
# On crée basiquement le cadre du graphique avec la fonction ggplot() de `ggplot2`.

Il est bien de préciser que l’on pourrait ajouter tous les éléments pertinents à un graphique, mais pour le bien de l’exemple, nous allons garder celui-ci le plus simple possible, avec le nom des variables pour nom d’axes.

my_gg <- g + geom_point_interactive(aes(tooltip = stations), size = 2)
# Voir la description de cette ligne de commande juste en dessous du graphique.
ggiraph(code = print(my_gg))
# Cette ligne de commande va "activer" l'animation. Sans elle, le graphe est inerte.

geom_point_interactive() est une fonction de ggiraph. C’est cette fonction qui va pouvoir dire à R le type d’animation que l’utilisateur veut appliquer sur un graphique. Comme on peut le voir, elle fonctionne comme un “calque” qui s’ajoute par dessus le graphique créé par la fonction ggplot().

C’est en donnant l’argument tooltip à la fonction geom_point_interactive() que l’on initie l’animation de l’infobulle. La valeur donnée à cet argument sera la valeur qui sera affichée dans les infobulles.

Au présent exemple, en appelant tooltip = station, les infobulles affichent le nombre de stations ayant rapporté le séisme pour chaque point.

1.2 Options supplémentaires de tooltip

Par défaut, l’infobulle est carré, de couleur noir opaque et l’information quelle partage est écrite en blanc. Certaines options sont modifiables à partir de la fonction ggiraph(). Voici quelques exemples d’options pouvant être modifiées :

  • La position de la bulle (tooltip_offx et tooltip_offy)

  • Le style de la bulle (tooltip_extra_css)

    • Forme de la bulle (border-radius)
    • Dimensions de la bulle (padding)
    • Couleur de fond de la bulle (background-color)
    • Type d’écriture (font-style)
    • Couleur de l’écriture (color)
  • L’opacité de la bulle (tooltip_opacity)

Voici un exemple combinant quelques options mentionnées pour tooltip :

my_gg <- g + geom_point_interactive(aes(tooltip = stations), size = 2)

ggiraph(code = print(my_gg), 
        tooltip_extra_css = "background-color:gray;color:white;font-style:italic;padding:10px;border-radius:10px 20px 10px 20px;",
        tooltip_opacity = 0.75)

2 Surbrillance (data_id)

2.1 Fonction générale

Une autre animation intéressante que propose le package ggiraph consiste à mettre les éléments d’un graphique (dans notre cas, les points d’un nuage de dispersion) en surbrillance lorsque le curseur est placé dessus.

my_gg <- g + geom_point_interactive(aes(data_id = stations), size = 2)
ggiraph(code = print(my_gg))

Il est bien de remarquer qu’ici, ce n’est pas tooltip qui est donné comme argument à geom_point_interactive() mais data_id. C’est parce que l’animation désirée n’est plus l’infobulle mais bien la surbrillance, et cette animation est initiée par l’argument data_id.

2.2 Options supplémentaires de data_id

Il est possible d’ajouter un argument à la fonction ggiraph() afin de modifier le style de surbrillance utilisé. Cet argument est hover_css et il prend par défaut les valeurs fill:orange;stroke:gray, qui affiche une surbrillance orangée ayant un contour gris.

Voici quelques options disponible pour l’argument hover_css :

  • Type de pointeur (cursor)
  • Couleur de la surbrillance (fill)
  • Couleur de la bordure (stroke)
  • Épaisseur de la bordure (stroke-width)
  • Opacité de la surbrillance (fill-opacity)
  • Grosseur de la surbrillance (r)

Il est toutefois à noter que la grosseur de la surbrillance n’a aucun effet lorsque Firefox est le navigateur utilisé.

Voici un exemple afin d’illustrer le tout :

my_gg <- g + geom_point_interactive(aes(data_id = stations), size = 2)
ggiraph(code = print(my_gg), hover_css = "cursor:pointer;fill:red;stroke:gray;stroke-width:2pt;")

3 Ouverture de page (onclick)

La dernière fonctionnalité du package ggiraph que nous présenterons consiste en l’ouverture de fenêtres Internet par un simple clic sur un élément du graphique (encore une fois, dans notre exemple, sur un point du graphique de dispersion).

Bien que l’on puisse amener l’utilisateur à ouvrir n’importe quelle page Internet en un simple clic, l’insertion d’une telle interaction sur un graphique doit ajouter une plus-value aux résultats présentés, sans quoi son utilisation serait quelque peu banale et anodine. Dans le jeu de données quakes, par exemple, on présente l’information concernant la latitude et la longitude de certains séismes. Il nous est alors possible d’ouvrir la page de Google Maps correspondant à ces données de localisation afin que l’utilisateur puisse situer l’emplacement de ces séismes sur une carte du Monde en cliquant sur un point.

Voyons cela de plus près :

quakes2$position <- paste0(quakes2$lat, ",", quakes2$long,  ",5z")
# On crée une chaîne de caractères, qui correspond à la fin de l'URL de Google Maps
# pour des données de latitude et longitude. Le 5z correspond à l'altitude.

quakes2$Instruclick <- sprintf("window.open(\"%s%s\")",
        "https://www.google.ca/maps/search/map/@", as.character(quakes2$position))
# On crée une nouvelle colonne dans le data_frame quakes2 intitulée "Instruclick".
# Quand l'utilisateur cliquera sur un point du graphe, R ira chercher l'instruction à suivre dans cette colonne.

g <- ggplot(quakes2, aes( x = long, y = lat, color = depth)) + coord_quickmap()
# On recrée une base du plot.
my_gg <- g + geom_point_interactive(aes(onclick = Instruclick), size = 2)
ggiraph(code = print(my_gg))

Pour effectuer cette opération, on attribut l’argument onclick à la fonction geom_pont_interactive(). On lui assigne alors l’instruction à effectuer. Ici, c’est dans la colonne Instruclick qu’il la trouve. Elle lui indique d’ouvrir une page à l’URL suivant : https://www.google.ca/maps/search/map/@“Latitude”,“Longitude”,5z

ATTENTION : Il faut que le graphique soit visualisé depuis un navigateur Internet pour que l’animation onclick fonctionne ! En fait, avec cette commande, R tente d’ouvrir une page depuis sa fenêtre active. Si l’utilisateur tente d’ouvrir une page Internet, soit une URL, a partir de R, cela ne fonctionnera forcément pas. Toutefois, si le graphique est visualisé depuis un navigateur Web (Explorer, Chrome ou Firefox par exemple), l’argument onclick permettra d’ouvrir une page Internet à partir d’une nouvelle fenêtre du navigateur utilisé et le résultat souhaité s’affichera.

4 Combinaison d’arguments

Maintenant que nous avons vu les trois possibilités qu’offrait le package ggiraph, sachez qu’il est tout à fait possible et pertinent de les utiliser en même temps. En effet, la combinaison des trois types d’information interactive complète parfaitement un graphique.

my_gg <- g + geom_point_interactive(aes(tooltip = stations,
                                        data_id = stations,
                                        onclick = Instruclick), size = 2)

# Option des arguments
options_tooltip <- "background-color:gray;color:white;font-style:italic;padding:7pt"
options_hover_css <- "fill:pink;stroke:gray;"
ggiraph(code = print(my_gg), 
        tooltip_extra_css=options_tooltip, 
        tooltip_opacity = 0.75, 
        hover_css=options_hover_css)