plotly? plotly.js? plot.ly? ggplot? ggplotly? WHAT?

Voilà quelques temps que j'entends parler de plotly, sans bien comprendre en quoi cela consiste (une API? un package?) ni en quoi cela pourrait m'être utile maintenant que j'ai trouvé l'épanouissement graphique avec le package ggplot2...

Et pour cause! plot.ly, c'est un outil en ligne (disponible ici : https://plot.ly) qui permet de créer des graphiques en ligne, et qui s'appuie sur une librairie JavaScript plotly.js. Mais plotly c'est aussi (entre autres) un package R qui permet de

  • créer de (jolis) graphiques interactifs
  • transformer de (jolis) graphiques issus de ggplot2 pour les rendre interactifs

Là où le deuxième point prend tout son sens, c'est que ceux qui auraient déjà trouvé l'épanouissement avec ggplot2 pourront utiliser plotly sans devoir se mettre à une nouvelle logique (ni même à une nouvelle syntaxe) de production graphique. Ainsi, les ggplot2-addicts passeront de l'épanouissement à l'épanouissement total.

Soyons clairs, en tant que formatrice R et ggplot2 (et développeuse d'un truc qui ressemble vaguement à l'outil plotly même si -soyons lucides- mon outil est plus modeste), c'est surtout le deuxième aspect qui m'intéresse!!

Démonstration!

Commençons par faire un graphique ggplot2 (ici, le temps de sommeil de diverses espèces en fonction de leur poids, avec la couleur des points qui diffère en fonction de leur régime alimentaire) :

library(ggplot2)
data(msleep)
p=ggplot(msleep,aes(x=bodywt,y=sleep_total, label=name))+
  geom_point(aes(color=vore),size=2)+
  geom_smooth()+
  scale_x_log10()
p

Bon, par la grâce de ggplot2 c'est déjà joli, mais voyez ce qui se passe quand on "plotlyfie" ce graphique à l'aide de la fonction ggplotly du package plotly (passez votre souris sur le graphique!) :

library(plotly)
ply <- ggplotly(p) 
ply

N'est-ce pas merveilleux? Voilà que, entre autres fonctionnalités (voir en haut à droite du graphique):

  • vous avez accès aux valeurs des données sous-jacentes simplement au passage de la souris sur les points, lignes, ou tout autre élément porteur d'information (selon le type de graphique que vous aurez réalisé),
  • vous avez la possibilité de déplacer le focus de la fenêtre graphique ou de zoomer sur une zone du graphique qui retiendrait votre attention...

Notez que si vous vouliez inclure moins d'informations dans les "infobox" qui s'affichent, vous pourriez utiliser l'argument tooltip de la fonction ggplotly. Ici, j'avais utilisé pour construire mon graphique ggplot2 p les esthétiques "x","y","label", et "color", et par défaut, toutes les informations associées à ces esthétiques sont affichées dans les infobox. J'aurais en fait pu n'afficher que -par exemple- les noms d'espèces (associées à "label") en faisant:

ply=ggplotly(p,tooltip="label")

Et pour partager ce beau graphique avec le monde ?

C'est là que les choses se compliquent un petit peu... Il est très simple de produire un graphique en local sur votre propre machine, MAIS ce graphique est en html (c'est à la fois sa force et sa faiblesse!). Cela veut dire qu'on ne va pas pouvoir l'intégrer à n'importe quel type de document... Principalement, un graphique plotly sera soit une page html en soi, soit un élément intégrable à:

  • un document html
  • une Shiny App

Pour les afficionados du Word, donc, ça ne sera pas possible d'intégrer votre graphique plotly à un document Word. Notez qu'il semble possible, en revanche, de les intégrer à Powerpoint (si vous devez faire une présentation à une conférence où il s'agit du format requis -oui, ça existe encore-) à travers l'usage de cet add-in gratuit MS Office pour Windows (je ne l'ai pas testé, si vous avez des retours à faire n'hésitez pas à poster un commentaire!).

Si vous avez l'habitude de travailler avec Rmarkdown et de produire des rapports (en html!) et des présentations (en html!) avec ces outils, alors les figures plotly s'y intégreront très simplement...

Dès lors, vous pourrez intégrer de belles figures plotly à des pages html, que vous pourrez envoyer à vos collaborateurs.

Une petite remarque (qui pourra sembler triviale à certains, mais un apprenti-geek averti en vaut deux):

Ce n'est pas parce qu'une page html s'affiche dans votre navigateur web qu'elle est sur le web! Quand vous produisez une page html avec (par exemple) Rmarkdwown ou une Shiny App, elle est à la base enregistrée localement, sur votre propre ordinateur. Si vous voulez faire voir votre document html (figure plotly comprise) à quelqu'un, il vous faudra l'envoyer par mail (par exemple) comme une pièce jointe ordinaire...

Si au contraire vous souhaitez partager ce document en ligne, il faudra mettre/déployer ce document html/cette Shiny App sur un serveur web/Shiny (si vous en avez un). Si vous n'avez pas cette possibilité, notez que vous pouvez néanmoins partager une figure plotly en ligne en vous créant un compte gratuit sur https://plot.ly. Ensuite, vous pourrez envoyer votre figure depuis R vers votre compte plotly en suivant les instructions détaillées ici.

J'y ai déposé cette même figure.

Attention! J'ai créé un compte gratuit sur ce site, et à ce titre, toute figure que j'y dépose est publique. Ainsi, toute personne peut accéder aux-données sous-jacentes à la figure (voir onglet "Data"). Si vous travaillez sur des données confidentielles, donc, il faudra soit opter pour un compte payant (qui permet de spécifier que certaines figures et données sont privées ou secrètes), soit opter pour une autre solution que le site de plotly pour héberger vos figures!

Et pour aller plus loin:

La documentation de plotly pour R.

Et un comparatif de diverses solutions en matière de dataviz avec R.