Para trazar con R, ¿debería aprender ggplot2 o ggvis?


38

Para trazar con R, ¿debería aprender ggplot2 o ggvis? No necesariamente quiero aprender ambos si uno de ellos es superior en algún aspecto. ¿Por qué la comunidad R sigue creando nuevos paquetes con funcionalidades superpuestas? La publicación del blog de introducción no menciona una palabra de por qué se crea ggvis dado que ya existe un paquete de trazado sofisticado ggplot2.


55
ggvis es un hervidor de pescado completamente diferente. La alternativa real es entre ggplot y lattice .
Gala

1
Creo que la respuesta depende de lo que buscas. Si está buscando tramas avanzadas estáticas, querrá aprender ggplot2. Para la visualización web, considere ggvis.
Roman Luštrik

Respuestas:


39

Comience con ggplot2. Crea tramas estáticas.

Además de los gráficos estáticos, ggvis también se puede utilizar para crear gráficos interactivos. Una vez que haya aprendido la sintaxis de ggplot2, la sintaxis para agregar interactividad para crear gráficos de ggivs seguirá de forma natural.


44
Esto es inexacto (tal vez fue preciso en el momento de la escritura). ggvis definitivamente se puede usar para crear trazados estáticos. El hecho de que también permita trazados interactivos es una característica, no una limitación. Un ejemplo simple de una trama estática:library('ggvis'); mtcars %>% ggvis(~wt, ~mpg) %>% layer_points(fill = ~factor(cyl))
Andre Terra

47

Quiero ampliar un poco la respuesta de Dianne Cook. Como ella dijo, ggplot2 es para crear gráficos estáticos, ggvis es para gráficos interactivos. Hay un montón de implicaciones para eso:

El tipo de archivo de salida de ggvis es HTML, incluidos los archivos CSS y JavaScript. ggvis no genera naturalmente archivos de imagen ordinarios. ggplot2 genera imágenes ordinarias, que luego pueden ser incrustadas en HTML o pdf o gif o enviadas por correo electrónico, o lo que sea. ggvis, si desea enviar el archivo por correo electrónico, está comprimiendo un directorio de archivos HTML para ver en un navegador.

Animación Una consecuencia de eso es que si desea crear una animación, puede hacer los cuadros en ggplot2 y fusionarlos, pero no hay una forma natural de hacerlo con ggvis. ggvis actuando interactivamente animará "en vivo", pero estos son diferentes tipos de animación. Si hay más cosas por cuadro de las que ggvis puede procesar, no puede evitarlo (al menos de forma natural) generando las imágenes y haciendo la película en segundo plano. Del mismo modo, el usuario no puede descargar una película o un archivo gif de ggvis para reproducirlo.

En este momento en mi proyecto actual, cambié de ggplot2 a ggvis porque ggplot2 era demasiado lento para animar interactivamente. Pero también me gustaría que el usuario, después de jugar con la configuración, pueda hacer clic en "ir" y descargar una película de animación suave a toda velocidad de lo que hizo. No he descubierto cómo hacer esto usando ggvis, pero sería fácil usar ggplot2.

La velocidad ggvis es mucho, mucho, mucho más rápida que ggplot2, especialmente al cambiar datos. Cada gráfico de ggplot2 tiene un segundo o algunos retrasos. ggvis tiene un segundo más o menos cuando crea el gráfico por primera vez, después de eso el cambio de datos es perfecto: ggvis puede vincularse "reactivamente" a los datos para que se actualice cada vez que los datos cambien. Con ggplot2, toda la trama se volverá a dibujar.

Estilo y apariencia Las gráficas ggplot2 parecen un poco más bonitas, a primera vista, que las gráficas ggvis. Las parcelas ggplot2 son bastante elegantes. Las tramas de ggvis son más simples, pero están creciendo en mí. También hay extensiones para ggplot2, como los paquetes xkcd y wesanderson, donde no hay análogo para ggvis. Todos los gráficos de ggplot2 parecen hechos por la misma persona (el autor de ggplot2) y eso se cansa después de un tiempo.

Integridad Hay tipos de gráficos que puede crear en ggplot2 que ggvis no admite, al menos hasta ahora. Por ejemplo, no hay un elemento de trama "alfombra" en ggvis. He visto una o dos coropletas hechas con ggvis, pero todavía no hay soporte integrado natural. ggplot2 tiene coordenadas polares (es decir, gráficos circulares), ggvis no. También falta en ggvis (y está disponible en ggplot2 o en una extensión de ggplot2): boxplots; parcelas de contorno; mapas de calor naturales; tablas de correlación natural; diagramas de puntos; parcelas de violín; parcelas de red; dendrogramas Por supuesto, estoy seguro de que algunas personas muy inteligentes pueden crear todo esto en ggvis, pero no soy tan inteligente.

Anotaciones ggplot2 tiene un marco de anotaciones muy agradable, quizás subutilizado. ggvis no lo hace.

Subtramas y facetas ggplot2 tiene una característica de "facetado" muy agradable, pero quizás bastante limitada. También puede combinar múltiples gráficos ggplot2 usando el paquete de cuadrícula. A partir de ahora, tampoco puedes hacerlo con ggvis. Los gráficos de ggvis no se pueden combinar en una sola imagen (porque no son imágenes, son páginas web "en vivo"), y no admite ningún tipo de facetado o subtrama. Se supone que esto está en la tubería.

Flexibilidad visual ggplot2 quiere que cada trama se vea igual, lo que significa que el autor prefiere estilísticamente. No hay forma, por ejemplo, de tener una gráfica con múltiples ejes y en ggplot2. ggvis can. ggvis es mucho más flexible que ggplot2. Es mucho más fácil hacer cosas como ocultar leyendas, combinar múltiples leyendas en una sola, usar diferentes escalas para diferentes cosas en la misma trama, etc.

Personalización profunda Si desea crear, por ejemplo, una nueva escala inteligente, no es demasiado difícil hacerlo en ggplot2 (aunque es bastante confuso). Simplemente no parece haber una manera de hacer mucho de eso en ggvis. Tal vez es solo que aún no.

Series temporales ggplot2 no desea trazar series temporales. Es posible , pero no quieren . En realidad ninguno de ellos quiere; ambos insisten en recibir datos en un data.frame, y no pueden manejar xts u objetos del zoológico. Tampoco tienen características incorporadas para cortar una serie temporal. Pero ggvis no lucha contra la serie de tiempo tan duro como ggplot2. Eso es en parte porque supongo que es muy rápido actualizar los datos en un diagrama de ggvis. Si quieres trazar una serie de tiempo, tendrás que vencerlo en sumisión, pero ggvis es mucho menos pasivo-agresivo al respecto.

¿Son la misma sintaxis? Más o menos ... Hay mucho en común entre ellos, y aprender a pensar al estilo de uno ayudará a adaptarse al estilo del otro. En particular, ambos están diseñados para que todas las llamadas de trazado se canalicen entre sí en una sola línea de código. La principal ventaja de esto es que hace que la depuración y la creación de perfiles sean realmente difíciles, y básicamente hace que las funciones de depuración / creación de perfiles en cosas como Rstudio sean inútiles. Aparte de eso, son sintácticamente bastante diferentes. Algunas cosas que son difíciles en ggplot2 son fáciles en ggvis. Algunas cosas que son fáciles en ggplot2 son imposibles en ggvis. Y viceversa. (Prefiero un poco la forma en que ggvis hace las cosas, lo cual me resulta más fácil de entender).

Bugs ggvis todavía tiene bastantes. A veces se comporta de manera extraña. Sin embargo, a veces, las tramas desaparecen al azar por razones que tardan horas en solucionarse y tienen muy poco sentido. Los desarrolladores admiten esto libremente, ggvis aún no está listo para la producción. Si usted se ocupa de cualquier complejidad, que va a descubrir que no son broma.

El resultado final : el aprendizaje de la trama intermedia en cada uno lleva aproximadamente 16 horas. Entonces, de manera realista, probablemente aprenderás ambos.


1
Gran comparación
skan

¿Qué es más rápido ggvis o celosía o rgl? (para grandes conjuntos de datos)
skan

+1 fantástica escritura. Estoy de acuerdo con todo aquí basado en mis experiencias con ambos hasta ahora.
David Crook

Hola, ¿Qué pasa con ggvis vs rcharts?
skan

SERIE DE TIEMPO: ggplot2 definitivamente gana con la expansión ggfortify. Consulte esta excelente documentación al respecto: rpubs.com/sinhrks/basics .
Archimede

10

Creo que el mensaje que aparece después library(ggvis)se explica por sí mismo:

La API de ggvis actualmente está evolucionando rápidamente. Le recomendamos encarecidamente que no confíe en esto para la producción, pero no dude en explorar. Si encuentra un error claro, presente un ejemplo reproducible mínimo en https://github.com/rstudio/ggvis/issues . Para preguntas y otras discusiones, use https://groups.google.com/group/ggvis .

En comparación con ggplot2, ggvis aún carece de algunas características y pulido (no hay forma de agregar título a un gráfico, por ejemplo, los títulos de eje se superponen con etiquetas de marca, y hay más, no se admiten facetas, etc.) Por otro lado, la sintaxis de ggvis se siente un poco más limpio, y la interactividad es realmente increíble.

Desde mi propia experiencia, ggvis es imprescindible si está creando una aplicación brillante. Luego, los beneficios de tener un motor de trazado de gráficos web y amigable con R superan con creces cualquier deficiencia que tenga actualmente.

Si desea hacer gráficos estáticos para la exploración de datos, entonces ggplot2 es una biblioteca madura con muchas características interesantes y con una comunidad saludable de usuarios y muchos recursos para aprender.

La filosofía detrás de ambos paquetes es similar, por lo que las habilidades se pueden transferir con bastante facilidad de un paquete a otro.


8

La comunidad R sigue presentando paquetes nuevos (y a menudo superpuestos) por una variedad de razones:

1) Alguien quiere cambiar algo o agregar algo que no está disponible en un paquete existente, pero gran parte se superpone (por lo tanto, muchos paquetes que hacen regresión)

2) Alguien escribe un paquete como una tarea

3) Escribir paquetes es divertido (si te gusta ese tipo de cosas)

4) No saben que el paquete original existe


9
Con respecto al ejemplo específico y su punto 4: ggvis está escrito por las mismas personas que ggplot2. El punto importante aquí es que el uso de ggplot2 está tan extendido que se ha vuelto imposible implementar cambios sin romper muchos códigos / paquetes dependientes existentes.
Roland

1
¿Este tipo de reinvención del paquete preexistente está destinado a suceder al igual que las recesiones económicas en las sociedades capitalistas?
qazwsx

2
@Peter: Como un extraño a R, me parece un comentario justo pero (lo más inusual) ¡no respondes la pregunta!
Nick Cox

@ NickCox Respondí una de las preguntas que están en la pregunta. :-).
Peter Flom - Restablece a Monica

1
@Peter Punto muy justo. Una referencia cruzada a stats.stackexchange.com/questions/58966/… es, por lo tanto, pertinente.
Nick Cox
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.