Para plotar com R, devo aprender ggplot2 ou ggvis?


38

Para plotar com R, devo aprender ggplot2 ou ggvis? Não quero necessariamente aprender os dois se um deles for superior em qualquer aspecto. Por que a comunidade R continua criando novos pacotes com funcionalidades sobrepostas? A publicação do blog de introdução não menciona uma palavra por que o ggvis é criado, uma vez que já existe um sofisticado pacote de plotagem ggplot2.


5
O ggvis é uma chaleira de peixe totalmente diferente. A alternativa real é entre ggplot e treliça .
Gala

1
Eu acho que a resposta depende do que você procura. Se você estiver procurando gráficos avançados estáticos, precisará aprender ggplot2. Para visualização na web, considere ggvis.
Roman Luštrik

Respostas:


39

Comece com ggplot2. Ele cria gráficos estáticos.

Além de gráficos estáticos, o ggvis também pode ser usado para criar gráficos interativos. Depois de aprender a sintaxe do ggplot2, a sintaxe para adicionar interatividade para criar gráficos do ggivs seguirá naturalmente.


4
Isso é impreciso (talvez tenha sido preciso no momento da redação). Definitivamente, o ggvis pode ser usado para criar gráficos estáticos. O fato de também permitir gráficos interativos é um recurso, não uma limitação. Um exemplo simples de um gráfico estático:library('ggvis'); mtcars %>% ggvis(~wt, ~mpg) %>% layer_points(fill = ~factor(cyl))
Andre Terra

47

Quero expandir um pouco a resposta de Dianne Cook. Como ela disse, ggplot2 é para criar gráficos estáticos, ggvis é para gráficos interativos. Há várias implicações nisso:

Tipo de arquivo A saída ggvis é HTML, incluindo arquivos CSS e javascript. O ggvis não produz naturalmente arquivos de imagem comuns. O ggplot2 gera imagens comuns, que podem ser incorporadas em HTML ou pdf, gif ou e-mail, ou qualquer outra coisa. ggvis, se você deseja enviar por e-mail o arquivo, está compactando um diretório de arquivos HTML para serem visualizados em um navegador.

Animação Uma conseqüência disso é que, se você quiser criar uma animação, poderá criar os quadros no ggplot2 e mesclá-los, mas não há uma maneira natural de fazer isso com o ggvis. O ggvis agindo interativamente animará "ao vivo", mas esses são tipos diferentes de animação. Se houver mais coisas acontecendo por quadro do que o ggvis pode processar, você não poderá contornar isso (pelo menos de maneira natural) gerando as imagens e criando o filme em segundo plano. Da mesma forma, o usuário não pode baixar um arquivo de filme ou gif do ggvis para reproduzir.

No momento, no meu projeto atual, mudei do ggplot2 para o ggvis porque o ggplot2 era muito lento para animar interativamente. Mas também gostaria que o usuário, depois de brincar com as configurações, pudesse clicar em "ir" e baixar um filme de animação suave e em velocidade total do que fez. Eu não descobri como fazer isso usando o ggvis, mas seria bolo usando o ggplot2.

A velocidade do ggvis é muito, muito, muito mais rápida que o ggplot2, especialmente ao alterar dados. Cada gráfico do ggplot2 tem um segundo ou alguns de atraso. O ggvis possui um segundo aproximadamente quando você cria o gráfico, depois que a alteração dos dados é contínua - o ggvis pode ser "reativamente" vinculado aos dados, para que ele se atualize sempre que os dados forem alterados. Com o ggplot2, todo o gráfico será redesenhado.

Estilo e aparência As plotagens ggplot2 parecem um pouco mais agradáveis, à primeira vista, do que as plotagens ggvis. Os gráficos ggplot2 são bastante elegantes. As plotagens ggvis são mais simples, mas estão crescendo em mim. Também existem extensões para o ggplot2, como os pacotes xkcd e wesanderson, onde não há analógico para o ggvis. Todos os gráficos do ggplot2 parecem ter sido feitos pela mesma pessoa (o autor do ggplot2) e isso fica cansado depois de um tempo.

Completude Existem tipos de plotagem que você pode criar no ggplot2 que o ggvis não suporta, pelo menos até o momento. Por exemplo, não há elemento de plotagem "rug" no ggvis. Eu já vi um ou dois coropletas feitos com o ggvis, mas ainda não há suporte interno natural. O ggplot2 possui coordenadas polares (ou seja, gráficos de pizza), o ggvis não. Também está faltando no ggvis (e disponível no ggplot2 ou em uma extensão ggplot2): boxplots; gráficos de contorno; mapas térmicos naturais; gráficos de correlação natural; dotplots; parcelas de violino; parcelas de rede; dendrogramas. É claro que tenho certeza que algumas pessoas muito inteligentes podem criar tudo isso no ggvis, mas não sou tão inteligente assim.

Anotações O ggplot2 possui uma estrutura de anotação muito boa, talvez subutilizada. ggvis não.

Subparcelas e facetas O ggplot2 possui um recurso de "faceta" muito bom, mas talvez bastante limitado. Você também pode combinar vários gráficos do ggplot2 usando o pacote de grade. A partir de agora, você não pode fazer nada com ggvis. Os gráficos do ggvis não podem ser combinados em uma única imagem (porque não são imagens, são páginas da web "ao vivo") e não suporta nenhum tipo de faceta ou sub-plotagem. Isso deveria estar no pipeline.

Flexibilidade visual O ggplot2 deseja que cada plot tenha a mesma aparência, o que significa que o autor prefere estilisticamente. Por exemplo, não há como ter um gráfico com vários eixos y no ggplot2. ggvis can. O ggvis é muito mais flexível que o ggplot2. É muito mais fácil fazer coisas como ocultar legendas, combinar várias legendas em uma, usar escalas diferentes para coisas diferentes no mesmo enredo, etc.

Personalização profunda Se você deseja criar, por exemplo, uma nova escala inteligente, não é muito difícil fazer isso no ggplot2 (embora seja bastante confuso). Simplesmente não parece haver uma maneira de fazer muito disso no ggvis. Talvez ainda não seja.

Séries temporais O ggplot2 não gosta de plotar séries temporais. Ele pode , mas não quer . Na verdade, nenhum deles quer; ambos insistem em alimentar dados em um data.frame e não podem manipular xts ou objetos de zoológico. Eles também não possuem recursos internos para fatiar uma série temporal. Mas o ggvis não luta contra as séries temporais com tanta força quanto o ggplot2. Em parte porque é muito rápido atualizar os dados em um gráfico ggvis, suponho. Se você deseja traçar uma série do tempo, será necessário finalizar, mas o ggvis é muito menos agressivo e passivo.

Eles são a mesma sintaxe? Mais ou menos ... Há muito em comum entre eles, e aprender a pensar no estilo de um ajudará a se adaptar ao estilo do outro. Em particular, ambos são projetados para que todas as chamadas de plotagem sejam canalizadas uma para a outra em uma única linha de código. A principal vantagem disso é que torna a depuração e a criação de perfis realmente difíceis e basicamente torna inúteis os recursos de depuração / criação de perfis em coisas como o Rstudio. Fora isso, eles são sintaticamente bem diferentes. Algumas coisas difíceis no ggplot2 são fáceis no ggvis. Algumas coisas fáceis no ggplot2 são impossíveis no ggvis. E vice versa. (Tenho um pouco de preferência pela maneira como o ggvis faz as coisas, o que acho mais fácil de entender.)

Bugs ggvis ainda tem muitos. Às vezes se comporta de maneira estranha. Às vezes, porém, as parcelas desaparecem aleatoriamente por razões que levam horas para serem contornadas e fazem muito pouco sentido. Os desenvolvedores admitem isso livremente, o ggvis ainda não está pronto para produção. Se você lidar com qualquer complexidade, você vai descobrir que eles não estão brincando.

Conclusão: aprender a plotagem intermediária em cada uma leva cerca de 16 horas. Então, realisticamente, você provavelmente aprenderá os dois.


1
Grande comparação
skan

O que é ggvis, lattice ou rgl mais rápido? (para grandes conjuntos de dados)
skan 31/10/2015

+1 fantástico escrever. Eu concordo com tudo aqui baseado em minhas experiências com os dois até agora.
David Crook

Olá, e quanto ao ggvis vs rcharts?
skan

SÉRIE DE TEMPO: o ggplot2 vence definitivamente com a expansão ggfortify. Veja esta excelente documentação: rpubs.com/sinhrks/basics .
Archimede

10

Eu acho que a mensagem que aparece depois library(ggvis)é auto-explicativa:

Atualmente, a API ggvis está evoluindo rapidamente. É altamente recomendável que você não confie nisso para produção, mas fique à vontade para explorar. Se você encontrar um bug claro, arquive um exemplo mínimo reproduzível em https://github.com/rstudio/ggvis/issues . Para perguntas e outras discussões, use https://groups.google.com/group/ggvis .

Comparado com o ggplot2, o ggvis ainda carece de alguns recursos e polimento (não há como adicionar título a um gráfico, por exemplo, títulos de eixos sobrepostos a rótulos de ticks e mais, facetas não são suportadas etc.) Por outro lado, a sintaxe do ggvis parece um pouco mais limpo e a interatividade é realmente incrível.

Pela minha própria experiência, o ggvis é essencial se você estiver criando um aplicativo brilhante. Então, os benefícios de ter um mecanismo de plotagem de gráficos amigável para a Web e R superam fortemente as deficiências que ele possui atualmente.

Se você deseja criar gráficos estáticos para exploração de dados, o ggplot2 é uma biblioteca madura, com muitos recursos interessantes e uma comunidade saudável de usuários e muitos recursos para aprender.

A filosofia por trás de ambos os pacotes é semelhante, portanto, as habilidades podem ser transferidas facilmente de um pacote para outro.


8

A comunidade R continua apresentando novos pacotes (e muitas vezes se sobrepõem) por vários motivos:

1) Alguém quer mudar algo ou adicionar algo que não está disponível em um pacote existente, mas muito disso se sobrepõe (portanto, muitos pacotes que fazem regressão)

2) Alguém escreve um pacote como uma atribuição

3) Escrever pacotes é divertido (se você gosta desse tipo de coisa)

4) Eles não sabem que a embalagem original existe


9
Com relação ao exemplo específico e seu ponto 4: o ggvis é de autoria das mesmas pessoas que o ggplot2. O ponto importante aqui é que o uso do ggplot2 é tão amplo que tornou-se impossível implementar mudanças sem quebrar muitos pacotes dependentes de código / existentes.
Roland

1
Esse tipo de reinvenção do pacote preexistente está destinado a acontecer exatamente como as recessões econômicas nas sociedades do capitalismo?
Qazwsx

2
@ Peter: Como alguém de fora para R, isso me parece um comentário justo, mas (o mais incomum) você não responde à pergunta!
Nick Cox

@ NickCox Eu respondi uma das perguntas que estão na pergunta. :-).
Peter Flom - Restabelece Monica

1
@ Peter Ponto muito justo. Uma referência cruzada a stats.stackexchange.com/questions/58966/… é, portanto, pertinente.
Nick Cox
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.