Pour tracer avec R, dois-je apprendre ggplot2 ou ggvis?

38

Pour tracer avec R, dois-je apprendre ggplot2 ou ggvis? Je ne veux pas nécessairement apprendre les deux si l'un d'eux est supérieur à tous égards. Pourquoi la communauté R continue-t-elle de créer de nouveaux packages avec des fonctionnalités qui se chevauchent? Le billet de blog d'introduction ne mentionne pas pourquoi ggvis est créé étant donné qu'un logiciel de traçage sophistiqué, ggplot2, existe déjà.

Qazwsx
la source
5
ggvis est une marmite de poisson totalement différente. La vraie alternative est entre ggplot et treillis .
Gala
1
Je pense que la réponse dépend de ce que vous recherchez. Si vous recherchez des tracés avancés statiques, vous aurez envie d'apprendre ggplot2. Pour la visualisation Web, envisagez ggvis.
Roman Luštrik

Réponses:

39

Commencez avec ggplot2. Il crée des parcelles statiques.

Outre les tracés statiques, ggvis peut également être utilisé pour créer des tracés interactifs. Une fois que vous avez appris la syntaxe de ggplot2, la syntaxe permettant d'ajouter de l'interactivité pour créer des graphiques ggivs suivra naturellement.

Dianne Cook
la source
4
C'est inexact (peut-être que c'était exact au moment de la rédaction). ggvis peut certainement être utilisé pour créer des graphiques statiques. Le fait qu'il permette également les tracés interactifs est une caractéristique, pas une limitation. Un exemple simple d'intrigue statique:library('ggvis'); mtcars %>% ggvis(~wt, ~mpg) %>% layer_points(fill = ~factor(cyl))
Andre Terra
47

Je voudrais développer un peu la réponse de Dianne Cook. Comme elle l'a dit, ggplot2 sert à créer des graphiques statiques, ggvis est destiné à des graphiques interactifs. Il y a un tas d'implications à cela:

Type de fichier La sortie de ggvis est HTML, y compris les fichiers CSS et javascript. ggvis ne produit pas naturellement de fichiers image ordinaires. ggplot2 génère des images ordinaires, qui peuvent ensuite être incorporées au format HTML, pdf, gif ou envoyé par courrier électronique, ou à tout autre chose. ggvis, si vous souhaitez envoyer le fichier par courrier électronique, vous zippez un répertoire de fichiers HTML à afficher dans un navigateur.

Animation Une conséquence de cela est que si vous voulez créer une animation, vous pouvez créer les images dans ggplot2 et les fusionner, mais il n'y a pas de moyen naturel de le faire avec ggvis. ggvis agissant de manière interactive animera "live", mais ce sont différents types d'animation. Si le nombre d'images par image dépasse les capacités de ggvis, vous ne pouvez pas contourner ce problème (du moins de manière naturelle) en générant les images et en créant le film en arrière-plan. De même, l'utilisateur ne peut pas télécharger un film ou un fichier gif à partir de ggvis à rejouer.

Actuellement, dans mon projet actuel, je suis passé de ggplot2 à ggvis car ggplot2 était beaucoup trop lent pour une animation interactive. Mais j'aimerais aussi que l'utilisateur, après avoir modifié les paramètres, puisse cliquer sur "Go" et télécharger un film à la vitesse parfaite, avec une animation fluide de ce qu'il a fait. Je n'ai pas trouvé comment faire cela en utilisant ggvis, mais ce serait un gâteau en utilisant ggplot2.

Speed ggvis est beaucoup, beaucoup, beaucoup plus rapide que ggplot2, en particulier lors de la modification de données. Chaque tracé de ggplot2 a une seconde ou quelques retards. ggvis a environ deux secondes lorsque vous créez le tracé, après quoi la modification des données est transparente - ggvis peut être lié de manière "réactive" aux données afin de se mettre à jour chaque fois que les données changent. Avec ggplot2, toute l’intrigue va être redessinée.

Style et apparence Les parcelles ggplot2 semblent un peu plus agréables, à première vue, que les parcelles ggvis. Les parcelles ggplot2 sont assez élégantes. Les graphiques de ggvis sont plus simples, mais ils grandissent sur moi. Il existe également des extensions pour ggplot2, telles que les packages xkcd et wesanderson, où il n'y a pas d'analogue pour ggvis. Les graphes de ggplot2 ont tous l'air d'avoir été créés par la même personne (l'auteur de ggplot2) et cela fatigue au bout d'un moment.

Intégralité Il existe certains types de tracé que vous pouvez créer dans ggplot2 et que ggvis ne prend pas en charge, du moins jusqu'à présent. Par exemple, il n'y a pas d'élément de terrain "rug" dans ggvis. J'ai vu un ou deux choroplèthes fabriqués avec ggvis, mais il n'y a pas encore de support naturel intégré. ggplot2 a des coordonnées polaires (c'est-à-dire des camemberts), mais pas ggvis. Egalement manquant dans ggvis (et disponible dans ggplot2 ou dans une extension ggplot2): boxplots; courbes de niveau; cartes thermiques naturelles; tableaux de corrélation naturels; points graphiques; parcelles de violon; parcelles de réseau; dendrogrammes. Bien sûr, je suis sûr que des gens très intelligents peuvent créer tout cela dans ggvis, mais je ne suis pas aussi intelligent.

Annotations ggplot2 a un très beau framework d'annotation, peut-être sous-utilisé. ggvis ne le fait pas.

Sous-parcelles et facettes ggplot2 a une très belle fonctionnalité, mais peut-être plutôt limitée, de "facettage". Vous pouvez également combiner plusieurs tracés ggplot2 à l'aide du paquet grid. À partir de maintenant, vous ne pouvez pas faire non plus avec ggvis. Les tracés ggvis ne peuvent pas être combinés en une seule image (car ils ne sont pas des images, ce sont des pages Web "actives"), et il ne prend en charge aucun type de facettage ou de sous-tracé. Ceci est censé être dans le pipeline.

Flexibilité visuelle ggplot2 veut que chaque parcelle ait la même apparence, ce qui signifie que l'auteur préfère styliser. Par exemple, il n’ya aucun moyen d’avoir un tracé avec plusieurs axes y dans ggplot2. GGVIS peut. ggvis est beaucoup plus flexible que ggplot2. Il est beaucoup plus facile de faire des choses comme cacher des légendes, combiner plusieurs légendes en une seule, utiliser différentes échelles pour différentes choses sur la même parcelle, etc.

Personnalisation profonde Si vous voulez créer, par exemple, une nouvelle échelle intelligente, ce n'est pas trop difficile de le faire dans ggplot2 (bien que ce soit assez déroutant). Il ne semble pas y avoir de moyen de faire beaucoup de cela dans ggvis. Peut-être que c'est juste pas encore.

Séries temporelles ggplot2 n'aime pas tracer des séries chronologiques. Ça peut , mais ça ne veut pas . En fait, ni l'un ni l'autre ne veulent le faire. les deux insistent pour recevoir des données dans un data.frame, et ils ne peuvent pas gérer les objets xts ou zoo. Ils ne possèdent pas non plus de fonctionnalités intégrées pour découper une série chronologique. Mais ggvis ne se bat pas autant que ggplot2 contre la série chronologique. C'est en partie parce qu'il est si rapide de mettre à jour les données dans un graphique ggvis, je suppose. Si vous voulez tracer une chronologie, vous devrez battre soit dans la soumission, mais ggvis est beaucoup moins passif-agressif à ce sujet.

Sont-ils la même syntaxe? En quelque sorte ... Ils ont beaucoup en commun et apprendre à penser dans le style de l'un aidera à s'adapter au style de l'autre. En particulier, les deux sont conçus de manière à ce que tous les appels de traçage soient interconnectés sur une seule ligne de code. Le principal avantage de ceci est que cela rend le débogage et le profilage très difficiles, et rend les fonctionnalités de débogage / profilage dans des choses comme Rstudio inutiles. En dehors de cela, ils sont très différents du point de vue de la syntaxe. Certaines choses qui sont difficiles dans ggplot2 sont faciles dans ggvis. Une chose facile dans ggplot2 est impossible dans ggvis. Et vice versa. (J'ai une préférence pour la façon dont ggvis fait les choses, que je trouve plus facile à comprendre.)

Bugs ggvis en a encore pas mal. Parfois, il se comporte juste étrangement. Parfois, cependant, les parcelles disparaissent au hasard pour des raisons qui prennent des heures à contourner et qui ont très peu de sens. Les développeurs l'admettent librement, ggvis n'est pas encore prêt pour la production. Si vous traitez avec toute la complexité, vous allez découvrir qu'ils ne plaisantent pas.

The Bottom Line: Apprendre un tracé intermédiaire dans chacun prend environ 16 heures. Donc, de façon réaliste, vous allez probablement apprendre les deux.

Bob
la source
1
Excellente comparaison
skan
Quel est plus rapide ggvis ou treillis ou rgl? (pour les grands ensembles de données)
skan
+1 fantastique écrire. Je suis d’accord avec tout ce qui est ici, sur la base de mes expériences avec les deux à ce jour.
David Crook
Bonjour, qu'en est-il de ggvis vs rcharts?
Skan
SÉRIE TEMPS: ggplot2 gagne définitivement avec l'extension ggfortify. Voir cette excellente documentation à ce sujet: rpubs.com/sinhrks/basics .
Archimède
10

Je pense que le message qui suit library(ggvis)est explicite:

L'API de ggvis évolue actuellement rapidement. Nous vous recommandons vivement de ne pas compter sur cela pour la production, mais n'hésitez pas à l'explorer. Si vous rencontrez un bogue évident, veuillez créer un exemple reproductible minimal à l' adresse https://github.com/rstudio/ggvis/issues . Pour les questions et autres discussions, utilisez https://groups.google.com/group/ggvis .

Comparé à ggplot2, il manque encore quelques fonctionnalités et finitions à ggvis (aucun moyen d'ajouter un titre à un graphe par exemple, les titres d'axes se chevauchant avec des libellés de ticks, et d'autres encore, la facettisation n'est pas prise en charge, etc.). un peu plus propre et l'interactivité est vraiment géniale.

De ma propre expérience, ggvis est un must si vous construisez une application brillante. Ensuite, les avantages d'un moteur de traçage de graphique convivial Web et R compensent largement les inconvénients qu'il présente actuellement.

Si vous souhaitez créer des graphiques statiques pour l'exploration de données, alors ggplot2 est une bibliothèque mature offrant de nombreuses fonctionnalités intéressantes, une communauté d'utilisateurs et de nombreuses ressources utiles.

La philosophie des deux packages étant similaire, les compétences peuvent être facilement transférées d'un package à un autre.

mpiktas
la source
8

La communauté R ne cesse de proposer de nouveaux packages (qui se chevauchent souvent) pour diverses raisons:

1) Quelqu'un veut changer quelque chose ou ajouter quelque chose qui n'est pas disponible dans un paquet existant, mais une grande partie se chevauche (par conséquent, beaucoup de paquets qui font la régression)

2) Quelqu'un écrit un paquet en tant que tâche

3) Écrire des paquets, c'est amusant (si vous aimez ce genre de chose)

4) Ils ne savent pas que le paquet original existe

Peter Flom - Rétablir Monica
la source
9
Concernant l'exemple spécifique et votre point 4: ggvis est écrit par les mêmes personnes que ggplot2. Le point important ici est que l’utilisation de ggplot2 est si répandue qu’il est devenu impossible d’implémenter les modifications sans détruire beaucoup de code / packages dépendants existants.
Roland le
1
Ce genre de réinvention du paquet préexistant est-il destiné à se produire au même titre que les récessions économiques dans les sociétés capitalistes?
Qazwsx le
2
@ Peter: En tant qu'étranger de R, cela me semble être un commentaire honnête, mais (très inhabituellement) vous ne répondez pas à la question!
Nick Cox
@ NickCox, j'ai répondu à l'une des questions qui sont dans la question. :-)
Peter Flom - Rétablir Monica
1
@ Peter Très bon point. Un renvoi à stats.stackexchange.com/questions/58966/… est donc pertinent à mon avis.
Nick Cox