Voglio ampliare un po 'la risposta di Dianne Cook. Come ha detto, ggplot2 è per la creazione di grafici statici, ggvis è per i grafici interattivi. Ci sono un sacco di implicazioni a questo:
Tipo di file L'output di ggvis è HTML, inclusi file CSS e javascript. ggvis non genera naturalmente file di immagini normali. ggplot2 genera immagini ordinarie, che possono quindi essere incorporate in HTML o pdf o gif o e-mail o qualsiasi altra cosa. ggvis, se vuoi inviare il file per e-mail, stai comprimendo una directory di file HTML da visualizzare in un browser.
Animazione Una conseguenza di ciò è che se si desidera creare un'animazione, è possibile creare i fotogrammi in ggplot2 e unirli, ma non esiste un modo naturale per farlo con ggvis. La recitazione interattiva di ggvis animerà "dal vivo", ma si tratta di diversi tipi di animazione. Se c'è più spazio per frame che ggvis è in grado di elaborare, non puoi aggirare questo (almeno in modo naturale) generando le immagini e realizzando il film in background. Allo stesso modo, l'utente non può scaricare un film o un file gif da ggvis per la riproduzione.
In questo momento, nel mio progetto attuale, sono passato da ggplot2 a ggvis perché ggplot2 era troppo lento per l'animazione interattiva. Ma vorrei anche che l'utente, dopo aver giocato con le impostazioni, fosse in grado di fare clic su "vai" e scaricare un filmato ad alta velocità e con animazioni fluide di quello che hanno fatto. Non ho capito come farlo usando ggvis, ma sarebbe un gioco da ragazzi usando ggplot2.
Velocità ggvis è molto, molto, molto più veloce di ggplot2, specialmente quando si cambiano i dati. Ogni diagramma di ggplot2 ha un secondo o alcuni ritardi. ggvis ha circa un secondo quando si crea la trama per la prima volta, dopo che la modifica dei dati è perfetta - ggvis può essere "reattivamente" collegato ai dati in modo che si aggiorni da solo ogni volta che i dati cambiano. Con ggplot2, l'intera trama verrà ridisegnata.
Stile e aspetto I grafici ggplot2 sembrano un po 'più belli, a prima vista, dei grafici ggvis. Le trame ggplot2 sono piuttosto eleganti. Le trame di ggvis sono più semplici, ma stanno crescendo su di me. Ci sono anche estensioni per ggplot2, come i pacchetti xkcd e wesanderson, dove non c'è analogo per ggvis. Le trame di ggplot2 sembrano tutte create dalla stessa persona (l'autore di ggplot2) e questo si stanca dopo un po '.
Completezza Ci sono tipi di trama che puoi creare in ggplot2 che ggvis non supporta, almeno finora. Ad esempio non c'è alcun elemento della trama "tappeto" in ggvis. Ho visto uno o due coropleti realizzati con ggvis, ma non esiste ancora un supporto integrato naturale. ggplot2 ha coordinate polari (cioè, grafici a torta), ggvis no. Manca anche da ggvis (e disponibile in ggplot2 o in un'estensione ggplot2): boxplots; grafici di contorno; mappe di calore naturali; grafici di correlazione naturale; dotplots; trame di violino; grafici di rete; dendrogrammi. Ovviamente sono sicuro che alcune persone molto intelligenti possono creare tutto ciò in ggvis, ma non sono così intelligente.
Annotazioni ggplot2 ha un framework di annotazioni molto carino, forse sottoutilizzato. ggvis no.
Sottotrame e faccette ggplot2 ha una funzione di "sfaccettatura" molto bella, ma forse piuttosto limitata. Puoi anche combinare più grafici ggplot2 usando il pacchetto grid. A partire da ora, non puoi fare neanche con ggvis. I grafici di ggvis non possono essere combinati in una singola immagine (poiché non sono immagini, sono pagine Web "attive") e non supportano alcun tipo di sfaccettatura o subploting. Questo dovrebbe essere in cantiere.
Flessibilità visiva ggplot2 vuole che ogni trama abbia lo stesso aspetto, il che significa che l'autore preferisce stilisticamente. Non è possibile, ad esempio, avere un grafico con più assi y in ggplot2. ggvis can. ggvis è molto più flessibile di ggplot2. È molto più facile fare cose come nascondere legende, combinare più legende in una, usare scale diverse per cose diverse sulla stessa trama, ecc.
Personalizzazione profonda Se vuoi creare, per esempio, una nuova scala intelligente, non è troppo difficile farlo in ggplot2 (anche se è piuttosto confuso). Semplicemente non sembra esserci un modo per fare molto in ggvis. Forse è solo non ancora.
Serie storiche ggplot2 non ama tracciare serie storiche. Si può , ma non vuole . In realtà nessuno dei due vuole; entrambi insistono nel fornire dati in un data.frame e non sono in grado di gestire xts o oggetti zoo. Non hanno nemmeno funzionalità integrate per tagliare una serie temporale. Ma ggvis non reagisce contro le serie storiche tanto quanto ggplot2. Ciò è in parte dovuto al fatto che è così veloce aggiornare i dati in un diagramma di ggvis, suppongo. Se vuoi tracciare una serie di giochi, dovrai battere entrambi in sottomissione, ma ggvis è molto meno passivo-aggressivo al riguardo.
Sono la stessa sintassi? In un certo senso ... C'è molto in comune tra loro e imparare a pensare nello stile di uno aiuterà ad adattarsi allo stile dell'altro. In particolare, entrambi sono progettati in modo che tutte le chiamate di tracciamento vengano convogliate l'una nell'altra su un'unica riga di codice. Il vantaggio principale di ciò è che rende il debug e il profiling davvero difficili e sostanzialmente rende inutili le funzionalità di debug / profiling in cose come Rstudio. A parte questo, sono sintatticamente abbastanza diversi. Alcune cose difficili in ggplot2 sono facili in ggvis. Alcune cose facili in ggplot2 sono impossibili in ggvis. E viceversa. (Preferisco un po 'il modo in cui ggvis fa le cose, che trovo più facile da capire.)
Bug ggvis ne ha ancora parecchi. A volte si comporta in modo strano. A volte, tuttavia, le trame scompaiono casualmente per motivi che richiedono ore per aggirare e avere molto poco senso. Gli sviluppatori lo ammettono liberamente, ggvis non è ancora pronto per la produzione. Se avete a che fare con qualsiasi complessità, si dovrà scoprire non sono scherzando.
La linea di fondo: l' apprendimento della stampa intermedia in ciascuna richiede circa 16 ore. Quindi, realisticamente, probabilmente imparerai entrambi.