Per la stampa con R, dovrei imparare ggplot2 o ggvis?


38

Per la stampa con R, dovrei imparare ggplot2 o ggvis? Non voglio necessariamente imparare entrambi se uno di loro è superiore sotto tutti gli aspetti. Perché la comunità R continua a creare nuovi pacchetti con funzionalità sovrapposte? Il post sul blog di introduzione non menziona una parola per cui ggvis è stato creato dato che esiste già un sofisticato pacchetto di stampa ggplot2.


5
ggvis è un bollitore di pesce completamente diverso. La vera alternativa è tra ggplot e reticolo .
Gala,

1
Penso che la risposta dipenda da cosa stai cercando. Se siete alla ricerca di trame avanzate statiche, ti consigliamo di imparare ggplot2. Per la visualizzazione Web, considerare ggvis.
Roman Luštrik,

Risposte:


39

Inizia con ggplot2. Crea grafici statici.

Oltre ai grafici statici, ggvis può essere utilizzato anche per creare grafici interattivi. Dopo aver appreso la sintassi di ggplot2, la sintassi per l'aggiunta di interattività per creare grafici di ggivs seguirà naturalmente.


4
Questo è inaccurato (forse era accurato al momento della scrittura). ggvis può sicuramente essere usato per creare grafici statici. Il fatto che consenta anche trame interattive è una caratteristica, non una limitazione. Un semplice esempio di trama statica:library('ggvis'); mtcars %>% ggvis(~wt, ~mpg) %>% layer_points(fill = ~factor(cyl))
Andre Terra

47

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.


1
Grande confronto
skan

Cosa è più veloce ggvis o reticolo o rgl? (per set di dati di grandi dimensioni)
skan

+1 fantastico scrivere. Sono d'accordo con tutto qui in base alle mie esperienze con entrambi finora.
David Crook,

Ciao, che mi dici di ggvis vs rcharts?
skan

SERIE TIME: ggplot2 vince definitivamente con l'espansione ggfortify. Consulta questa eccellente documentazione al riguardo: rpubs.com/sinhrks/basics .
Archimede,

10

Penso che il messaggio che appare dopo library(ggvis)sia autoesplicativo:

L'API ggvis è attualmente in rapida evoluzione. Raccomandiamo vivamente di non fare affidamento su questo per la produzione, ma di sentirsi liberi di esplorare. Se si riscontra un bug chiaro, si prega di presentare un esempio riproducibile minimo su https://github.com/rstudio/ggvis/issues . Per domande e altre discussioni, utilizza https://groups.google.com/group/ggvis .

Rispetto a ggplot2, a ggvis mancano ancora alcune funzionalità e lucidature (ad esempio nessun modo per aggiungere titolo a un grafico, titoli degli assi che si sovrappongono con etichette tick, e ce ne sono altri, la sfaccettatura non è supportata, ecc.) D'altra parte la sintassi di ggvis si sente un po 'più pulito e l'interattività è davvero fantastica.

Dalla mia esperienza, ggvis è un must se stai costruendo un'app brillante. Quindi i vantaggi di avere un motore grafico e grafico R per la stampa di grafici superano pesantemente qualsiasi carenza attualmente presente.

Se vuoi creare grafici statici per l'esplorazione dei dati, ggplot2 è una libreria matura con molte funzioni interessanti e con una comunità sana di utenti e molte risorse da cui imparare.

La filosofia alla base di entrambi i pacchetti è simile, quindi le competenze possono essere trasferite abbastanza facilmente da un pacchetto all'altro.


8

La comunità R continua a presentare nuovi pacchetti (e spesso sovrapposti) per una serie di motivi:

1) Qualcuno vuole cambiare qualcosa o aggiungere qualcosa che non è disponibile in un pacchetto esistente, ma in gran parte si sovrappone (quindi, molti pacchetti che fanno regressione)

2) Qualcuno scrive un pacchetto come compito

3) Scrivere pacchetti è divertente (se ti piace quel genere di cose)

4) Non sanno che esiste il pacchetto originale


9
Per quanto riguarda l'esempio specifico e il tuo punto 4: ggvis è creato dalle stesse persone di ggplot2. Il punto importante qui è che l'uso di ggplot2 è così diffuso che è diventato impossibile implementare le modifiche senza rompere molti pacchetti di codice / dipendenti esistenti.
Roland,

1
Questo tipo di reinvenzione del pacchetto preesistente è destinato a verificarsi proprio come le recessioni economiche nelle società del capitalismo?
qazwsx,

2
@Peter: Come outsider di R questo mi sembra un commento equo ma (più insolitamente) non rispondi alla domanda!
Nick Cox,

@NickCox Ho risposto a una delle domande che si trovano nella domanda. :-).
Peter Flom - Ripristina Monica

1
@Peter Punto molto giusto. Un riferimento incrociato a stats.stackexchange.com/questions/58966/… è quindi pertinente.
Nick Cox,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.