{"id":764,"date":"2017-06-13T10:51:46","date_gmt":"2017-06-13T08:51:46","guid":{"rendered":"http:\/\/perso.ens-lyon.fr\/lise.vaudor\/?p=764"},"modified":"2017-06-13T10:51:46","modified_gmt":"2017-06-13T08:51:46","slug":"cest-donc-a-ca-que-ca-sert-plotly-pour-r","status":"publish","type":"post","link":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/cest-donc-a-ca-que-ca-sert-plotly-pour-r\/","title":{"rendered":"C&rsquo;est donc \u00e0 \u00e7a que \u00e7a sert, plotly pour R?"},"content":{"rendered":"<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/plotly\/Lise_Vaudor_headband-1.png\" alt=\"\" \/><\/p>\n<h1>plotly? plotly.js? plot.ly? ggplot? ggplotly? WHAT?<\/h1>\n<p>Voil\u00e0 quelques temps que j&rsquo;entends parler de <code>plotly<\/code>, sans bien comprendre en quoi cela consiste (une API? un package?) ni en quoi cela pourrait m&rsquo;\u00eatre utile maintenant que j&rsquo;ai trouv\u00e9 l&rsquo;\u00e9panouissement graphique avec le package <code>ggplot2<\/code>&#8230;<\/p>\n<p>Et pour cause! <code>plot.ly<\/code>, c&rsquo;est un outil en ligne (disponible ici : <a href=\"https:\/\/plot.ly\">https:\/\/plot.ly<\/a>) qui permet de cr\u00e9er des graphiques en ligne, et qui s&rsquo;appuie sur une librairie JavaScript <code>plotly.js<\/code>. Mais <code>plotly<\/code> c&rsquo;est aussi (entre autres) un package R qui permet de<\/p>\n<ul>\n<li><strong>cr\u00e9er<\/strong> de (jolis) <strong>graphiques interactifs<\/strong><\/li>\n<li><strong>transformer<\/strong> de (jolis) graphiques <strong>issus de ggplot2<\/strong> pour les rendre <strong>interactifs<\/strong><\/li>\n<\/ul>\n<p>L\u00e0 o\u00f9 le deuxi\u00e8me point prend tout son sens, c&rsquo;est que ceux qui auraient d\u00e9j\u00e0 trouv\u00e9 l&rsquo;\u00e9panouissement avec <code>ggplot2<\/code> pourront utiliser <code>plotly<\/code> sans devoir se mettre \u00e0 une nouvelle logique (ni m\u00eame \u00e0 une nouvelle syntaxe) de production graphique. Ainsi, les ggplot2-addicts passeront de l&rsquo;\u00e9panouissement \u00e0 l&rsquo;\u00e9panouissement total.<\/p>\n<p>Soyons clairs, en tant que formatrice R et ggplot2 (et d\u00e9veloppeuse d&rsquo;un <a href=\"https:\/\/analytics.huma-num.fr\/Lise.Vaudor\/graphiT\/\">truc qui ressemble vaguement \u00e0 l&rsquo;outil plotly<\/a> m\u00eame si -soyons lucides- mon outil est plus modeste), c&rsquo;est surtout le deuxi\u00e8me aspect qui m&rsquo;int\u00e9resse!!<\/p>\n<h1>D\u00e9monstration!<\/h1>\n<p>Commen\u00e7ons par faire un graphique <code>ggplot2<\/code> (ici, le temps de sommeil de diverses esp\u00e8ces en fonction de leur poids, avec la couleur des points qui diff\u00e8re en fonction de leur r\u00e9gime alimentaire) :<\/p>\n<pre><code>library(ggplot2)\r\ndata(msleep)\r\np=ggplot(msleep,aes(x=bodywt,y=sleep_total, label=name))+\r\n  geom_point(aes(color=vore),size=2)+\r\n  geom_smooth()+\r\n  scale_x_log10()\r\np\r\n<\/code><\/pre>\n<p><img decoding=\"async\" src=\"..\/..\/lise.vaudor\/Rfigures\/plotly\/unnamed-chunk-2-1.png\" alt=\"\" \/><\/p>\n<p>Bon, par la gr\u00e2ce de <code>ggplot2<\/code> c&rsquo;est d\u00e9j\u00e0 joli, mais voyez ce qui se passe quand on \u00ab\u00a0plotlyfie\u00a0\u00bb ce graphique \u00e0 l&rsquo;aide de la fonction <code>ggplotly<\/code> du package <code>plotly<\/code> (passez votre souris sur le graphique!) :<\/p>\n<pre><code>library(plotly)\r\nply &lt;- ggplotly(p) \r\nply\r\n<\/code><\/pre>\n<p><iframe loading=\"lazy\" width=\"900\" height=\"500\" frameborder=\"0\" scrolling=\"no\" src=\"\/\/plot.ly\/~lvaudor\/4.embed\"><br \/>\n<\/iframe><\/p>\n<p>N&rsquo;est-ce pas merveilleux? Voil\u00e0 que, entre autres fonctionnalit\u00e9s (voir en haut \u00e0 droite du graphique):<\/p>\n<ul>\n<li>vous avez acc\u00e8s aux <strong>valeurs des donn\u00e9es sous-jacentes<\/strong> simplement <strong>au passage de la souris<\/strong> sur les points, lignes, ou tout autre \u00e9l\u00e9ment porteur d&rsquo;information (selon le type de graphique que vous aurez r\u00e9alis\u00e9),<\/li>\n<li>vous avez la possibilit\u00e9 de <strong>d\u00e9placer le focus<\/strong> de la fen\u00eatre graphique ou de <strong>zoomer<\/strong> sur une zone du graphique qui retiendrait votre attention&#8230;<\/li>\n<\/ul>\n<p>Notez que si vous vouliez inclure <strong>moins d&rsquo;informations<\/strong> dans les \u00ab\u00a0infobox\u00a0\u00bb qui s&rsquo;affichent, vous pourriez utiliser l&rsquo;argument <code>tooltip<\/code> de la fonction <code>ggplotly<\/code>. Ici, j&rsquo;avais utilis\u00e9 pour construire mon graphique <code>ggplot2<\/code> <code>p<\/code> les esth\u00e9tiques \u00ab\u00a0x\u00a0\u00bb,\u00a0\u00bby\u00a0\u00bb,\u00a0\u00bblabel\u00a0\u00bb, et \u00ab\u00a0color\u00a0\u00bb, et par d\u00e9faut, toutes les informations associ\u00e9es \u00e0 ces esth\u00e9tiques sont affich\u00e9es dans les infobox. J&rsquo;aurais en fait pu n&rsquo;afficher que -par exemple- les noms d&rsquo;esp\u00e8ces (associ\u00e9es \u00e0 \u00ab\u00a0label\u00a0\u00bb) en faisant:<\/p>\n<pre><code>ply=ggplotly(p,tooltip=\"label\")\r\n<\/code><\/pre>\n<h1>Et pour partager ce beau graphique avec le monde ?<\/h1>\n<p>C&rsquo;est l\u00e0 que les choses se compliquent un petit peu&#8230; Il est tr\u00e8s simple de produire un graphique en local sur votre propre machine, MAIS ce graphique est en <strong>html<\/strong> (c&rsquo;est \u00e0 la fois sa force et sa faiblesse!). Cela veut dire qu&rsquo;on ne va pas pouvoir l&rsquo;int\u00e9grer \u00e0 n&rsquo;importe quel type de document&#8230; Principalement, un graphique <code>plotly<\/code> sera soit <strong>une page html en soi<\/strong>, soit un <strong>\u00e9l\u00e9ment int\u00e9grable<\/strong> \u00e0:<\/p>\n<ul>\n<li>un <strong>document html<\/strong><\/li>\n<li>une <strong>Shiny App<\/strong><\/li>\n<\/ul>\n<p>Pour les afficionados du Word, donc, \u00e7a ne sera pas possible d&rsquo;int\u00e9grer votre graphique <code>plotly<\/code> \u00e0 un document Word. Notez qu&rsquo;il semble possible, en revanche, de les <strong>int\u00e9grer \u00e0 Powerpoint<\/strong> (si vous devez faire une pr\u00e9sentation \u00e0 une conf\u00e9rence o\u00f9 il s&rsquo;agit du format requis -oui, \u00e7a existe encore-) \u00e0 travers l&rsquo;usage de cet <a href=\"https:\/\/store.office.com\/fr-fr\/app.aspx?assetid=WA104379485&amp;ui=fr-FR&amp;rs=fr-FR&amp;ad=FR&amp;appredirect=false\">add-in gratuit MS Office pour Windows<\/a> (je ne l&rsquo;ai pas test\u00e9, si vous avez des retours \u00e0 faire n&rsquo;h\u00e9sitez pas \u00e0 poster un commentaire!).<\/p>\n<p>Si vous avez l&rsquo;habitude de travailler avec Rmarkdown et de produire des rapports (en html!) et des pr\u00e9sentations (en html!) avec ces outils, alors les figures <code>plotly<\/code> s&rsquo;y int\u00e9greront tr\u00e8s simplement&#8230;<\/p>\n<p>D\u00e8s lors, vous pourrez int\u00e9grer de belles figures <code>plotly<\/code> \u00e0 des pages html, que vous pourrez envoyer \u00e0 vos collaborateurs.<\/p>\n<p>Une petite remarque (qui pourra sembler triviale \u00e0 certains, mais un apprenti-geek averti en vaut deux):<\/p>\n<p>Ce n&rsquo;est pas parce qu&rsquo;une page html s&rsquo;<strong>affiche dans votre navigateur web<\/strong> qu&rsquo;elle <strong>est<\/strong> sur le web! Quand vous produisez une page html avec (par exemple) Rmarkdwown ou une Shiny App, elle est \u00e0 la base enregistr\u00e9e <strong>localement<\/strong>, sur votre propre ordinateur. Si vous voulez faire voir votre document html (figure <code>plotly<\/code> comprise) \u00e0 quelqu&rsquo;un, il vous faudra l&rsquo;envoyer par mail (par exemple) comme une pi\u00e8ce jointe ordinaire&#8230;<\/p>\n<p>Si au contraire vous souhaitez partager ce document <strong>en ligne<\/strong>, il faudra mettre\/d\u00e9ployer ce document html\/cette Shiny App sur un serveur web\/Shiny (si vous en avez un). Si vous n&rsquo;avez pas cette possibilit\u00e9, notez que vous pouvez n\u00e9anmoins <strong>partager une figure <code>plotly<\/code> en ligne<\/strong> en vous cr\u00e9ant un compte gratuit sur <a href=\"https:\/\/plot.ly\">https:\/\/plot.ly<\/a>. Ensuite, vous pourrez envoyer votre figure depuis R vers votre compte <code>plotly<\/code> en suivant les instructions d\u00e9taill\u00e9es <a href=\"https:\/\/plot.ly\/r\/getting-started\/#initialization-for-online-plotting\">ici<\/a>.<\/p>\n<p>J&rsquo;y ai d\u00e9pos\u00e9 <a href=\"https:\/\/plot.ly\/~lvaudor\/4\/sleep-total-vs-bodywt\/\">cette m\u00eame figure<\/a>.<\/p>\n<p>Attention! J&rsquo;ai cr\u00e9\u00e9 un compte gratuit sur ce site, et \u00e0 ce titre, toute figure que j&rsquo;y d\u00e9pose est <strong>publique<\/strong>. Ainsi, toute personne peut acc\u00e9der aux-donn\u00e9es sous-jacentes \u00e0 la figure (voir onglet \u00ab\u00a0Data\u00a0\u00bb). Si vous travaillez sur des donn\u00e9es confidentielles, donc, il faudra soit opter pour un compte payant (qui permet de sp\u00e9cifier que certaines figures et donn\u00e9es sont priv\u00e9es ou secr\u00e8tes), soit opter pour une autre solution que le site de plotly pour h\u00e9berger vos figures!<\/p>\n<h1>Et pour aller plus loin:<\/h1>\n<p>La <a href=\"https:\/\/plot.ly\/r\/\">documentation de plotly pour R<\/a>.<\/p>\n<p>Et un <a href=\"http:\/\/www.thinkr.fr\/il-ny-a-pas-que-ggplot-dans-la-vie\/\">comparatif de diverses solutions en mati\u00e8re de dataviz avec R<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>plotly? plotly.js? plot.ly? ggplot? ggplotly? WHAT? Voil\u00e0 quelques temps que j&rsquo;entends parler de plotly, sans bien comprendre en quoi cela consiste (une API? un package?) ni en quoi cela pourrait m&rsquo;\u00eatre utile maintenant que j&rsquo;ai trouv\u00e9 l&rsquo;\u00e9panouissement graphique avec le package ggplot2&#8230; Et pour cause! plot.ly, c&rsquo;est un outil en ligne (disponible ici : https:\/\/plot.ly) qui permet de cr\u00e9er des graphiques en ligne, et qui s&rsquo;appuie sur une librairie JavaScript.. <a href=\"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/cest-donc-a-ca-que-ca-sert-plotly-pour-r\/\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-764","post","type-post","status-publish","format-standard","hentry","category-tous-les-posts"],"_links":{"self":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/764","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/comments?post=764"}],"version-history":[{"count":11,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/764\/revisions"}],"predecessor-version":[{"id":775,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/posts\/764\/revisions\/775"}],"wp:attachment":[{"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/media?parent=764"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/categories?post=764"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/perso.ens-lyon.fr\/lise.vaudor\/wp-json\/wp\/v2\/tags?post=764"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}