Untuk merencanakan dengan R, haruskah saya belajar ggplot2 atau ggvis?

38

Untuk merencanakan dengan R, haruskah saya belajar ggplot2 atau ggvis? Saya tidak perlu ingin belajar keduanya jika salah satu dari mereka lebih unggul dalam hal apa pun. Mengapa komunitas R terus membuat paket baru dengan fungsionalitas yang tumpang tindih? The posting pengenalan blog tidak menyebutkan kata mengapa ggvis ini dibuat mengingat bahwa canggih paket merencanakan ggplot2 sudah ada.

qazwsx
sumber
5
ggvis adalah ketel ikan yang sama sekali berbeda. Alternatif sebenarnya adalah antara ggplot dan kisi .
Gala
1
Saya pikir jawabannya tergantung pada apa yang Anda cari. Jika Anda mencari plot lanjutan statis, Anda pasti ingin belajar ggplot2. Untuk visualisasi web, pertimbangkan ggvis.
Roman Luštrik

Jawaban:

39

Mulai dengan ggplot2. Ini menciptakan plot statis.

Terlepas dari plot statis, ggvis dapat digunakan untuk membuat plot interaktif juga. Setelah Anda mempelajari sintaks ggplot2, maka sintaks untuk menambahkan interaktivitas untuk membuat plot ggivs akan mengikuti secara alami.

Dianne Cook
sumber
4
Ini tidak akurat (mungkin akurat pada saat penulisan). ggvis pasti dapat digunakan untuk membuat plot statis. Fakta bahwa ini juga memungkinkan plot interaktif adalah fitur, bukan batasan. Salah satu contoh sederhana dari plot statis:library('ggvis'); mtcars %>% ggvis(~wt, ~mpg) %>% layer_points(fill = ~factor(cyl))
Andre Terra
47

Saya ingin sedikit memperluas jawaban Dianne Cook. Seperti yang dia katakan, ggplot2 adalah untuk membuat plot statis, ggvis adalah untuk plot interaktif. Ada banyak implikasi untuk itu:

Jenis File keluaran ggvis adalah HTML termasuk file CSS dan javascript. ggvis tidak secara alami menampilkan file gambar biasa. ggplot2 menampilkan gambar biasa, yang kemudian dapat disematkan dalam HTML atau pdf atau gif atau email, atau apa pun yang lain. ggvis, jika Anda ingin mengirim email ke file tersebut, Anda membuka direktori file HTML untuk dilihat di browser.

Animasi Konsekuensi dari itu adalah bahwa jika Anda ingin membuat animasi, Anda dapat membuat bingkai di ggplot2 dan menggabungkannya, tetapi tidak ada cara alami untuk melakukan ini dengan ggvis. Akting ggvis secara interaktif akan menghidupkan "live," tetapi ini adalah berbagai jenis animasi. Jika ada lebih banyak hal yang terjadi per frame daripada yang bisa diproses oleh ggvis, Anda tidak dapat menyiasatinya (setidaknya dengan cara alami) dengan membuat gambar dan membuat film di latar belakang. Demikian pula, pengguna tidak dapat mengunduh file film atau gif dari ggvis untuk diputar ulang.

Saat ini dalam proyek saya saat ini, saya beralih dari ggplot2 ke ggvis karena ggplot2 terlalu lambat untuk menjiwai secara interaktif. Tapi, saya juga ingin pengguna, setelah bermain-main dengan pengaturan, untuk dapat mengklik "pergi" dan mengunduh film animasi kecepatan penuh yang lancar dari apa yang mereka lakukan. Saya belum menemukan cara untuk melakukan ini menggunakan ggvis, tetapi itu akan menjadi kue menggunakan ggplot2.

Kecepatan ggvis jauh, jauh, jauh lebih cepat daripada ggplot2, terutama ketika mengubah data. Setiap plot ggplot2 memiliki penundaan kedua atau beberapa. ggvis memiliki sekitar satu atau dua saat Anda pertama kali membuat plot, setelah itu mengubah data menjadi mulus - ggvis dapat "reaktif" terkait dengan data sehingga ia memperbarui dirinya sendiri setiap kali data berubah. Dengan ggplot2, seluruh plot akan digambar ulang.

Gaya & Penampilan Plot ggplot2 tampak sedikit lebih baik, pada pandangan pertama, daripada plot ggvis. plot ggplot2 cukup elegan. plot ggvis lebih sederhana, tetapi mereka tumbuh pada saya. Ada juga ekstensi untuk ggplot2, seperti paket xkcd dan wesanderson, di mana tidak ada analog untuk ggvis. Plot ggplot2 semuanya tampak seperti dibuat oleh orang yang sama (penulis ggplot2) dan itu menjadi lelah setelah beberapa saat.

Kelengkapan Ada jenis plot yang dapat Anda buat di ggplot2 yang tidak didukung ggvis, setidaknya sejauh ini. Misalnya tidak ada elemen plot "permadani" di ggvis. Saya telah melihat satu atau dua choropleth yang dibuat dengan ggvis, tetapi belum ada dukungan bawaan yang alami. ggplot2 memiliki koordinat kutub (yaitu, diagram lingkaran), ggvis tidak. Juga hilang dari ggvis (dan tersedia di ggplot2 atau dalam ekstensi ggplot2): boxplots; plot kontur; peta panas alami; grafik korelasi alami; dotplots; plot biola; plot jaringan; dendrogram. Tentu saja saya yakin beberapa orang yang sangat pandai dapat membuat semua ini di ggvis, tapi saya tidak sepintar itu.

Anotasi ggplot2 memiliki kerangka anotasi yang sangat bagus, mungkin kurang dimanfaatkan. ggvis tidak.

Subplot & Faset ggplot2 memiliki fitur "faceting" yang sangat bagus, tetapi mungkin agak terbatas. Anda juga dapat menggabungkan beberapa plot ggplot2 menggunakan paket kisi. Sampai sekarang, Anda tidak dapat melakukan keduanya dengan ggvis. plot ggvis tidak dapat digabungkan menjadi satu gambar (karena mereka bukan gambar, itu adalah halaman web "live"), dan plot itu tidak mendukung segala jenis faceting atau subplotting. Ini seharusnya ada dalam pipa.

Fleksibilitas Visual ggplot2 ingin setiap plot terlihat sama, yang berarti seperti penulis lebih suka gaya. Tidak ada cara, misalnya, untuk memiliki plot dengan beberapa sumbu y di ggplot2. ggvis bisa. ggvis jauh lebih fleksibel daripada ggplot2. Jauh lebih mudah untuk melakukan hal-hal seperti menyembunyikan legenda, menggabungkan banyak legenda menjadi satu, menggunakan skala yang berbeda untuk hal-hal yang berbeda pada plot yang sama, dll.

Kustomisasi yang Dalam Jika Anda ingin membuat, katakanlah, skala pintar yang baru, tidak terlalu sulit untuk melakukannya di ggplot2 (walaupun cukup membingungkan). Sepertinya tidak ada cara untuk melakukan banyak hal di ggvis. Mungkin belum.

Time Series ggplot2 tidak suka merencanakan time series. Itu bisa , tetapi tidak mau . Sebenarnya tak satu pun dari mereka yang mau; keduanya bersikeras diberi makan data dalam data.frame, dan mereka tidak dapat menangani objek xts atau kebun binatang. Mereka juga tidak memiliki fitur bawaan untuk mengiris seri waktu. Tapi ggvis tidak melawan seri waktu sekeras ggplot2. Itu sebagian karena begitu cepat untuk memperbarui data dalam plot ggvis, saya kira. Jika Anda ingin merencanakan deretan waktu, Anda harus mengalahkan salah satu yang harus diserahkan, tetapi ggvis jauh kurang pasif-agresif tentangnya.

Apakah Mereka Sintaks Yang Sama? Semacam ... Ada banyak kesamaan di antara mereka, dan belajar berpikir dengan gaya yang satu akan membantu untuk beradaptasi dengan gaya yang lain. Secara khusus, keduanya dirancang sehingga semua panggilan yang direncanakan disalurkan ke satu sama lain semua pada satu baris kode. Keuntungan utama dari ini adalah membuat debugging dan profil sangat sulit, dan pada dasarnya menjadikan fitur debugging / profil dalam hal-hal seperti Rstudio tidak berguna. Selain itu, secara sintaksis mereka sangat berbeda. Beberapa hal yang sulit di ggplot2 mudah di ggvis. Beberapa hal yang mudah di ggplot2 tidak mungkin di ggvis. Dan sebaliknya. (Saya memiliki sedikit preferensi untuk cara ggvis melakukan sesuatu, yang menurut saya lebih mudah dimengerti.)

Bugs ggvis masih memiliki beberapa. Kadang-kadang itu berperilaku aneh. Namun, terkadang, plot-plot itu menghilang secara acak karena alasan yang membutuhkan waktu berjam-jam untuk menyelesaikannya dan sangat tidak masuk akal. Pengembang mengakui ini dengan bebas, ggvis belum siap produksi. Jika Anda berurusan dengan kompleksitas, Anda akan menemukan mereka tidak bercanda.

Intinya: Mempelajari perencanaan menengah pada masing-masing membutuhkan waktu sekitar 16 jam. Jadi, secara realistis, Anda mungkin akan belajar keduanya.

Bob
sumber
1
Perbandingan hebat
skan
Apa yang lebih cepat ggvis atau kisi atau rgl? (untuk dataset besar)
skan
+1 tulisan fantastis. Saya setuju dengan semua yang ada di sini berdasarkan pengalaman saya dengan keduanya sejauh ini.
David Crook
Halo, bagaimana dengan ggvis vs rcharts?
skan
SERI WAKTU: ggplot2 secara definitif menang dengan ekspansi ggfortify. Lihat dokumentasi yang sangat bagus tentang ini: rpubs.com/sinhrks/basics .
Archimede
10

Saya pikir pesan yang muncul setelah library(ggvis)cukup jelas:

API ggvis saat ini berkembang pesat. Kami sangat menyarankan agar Anda tidak bergantung pada ini untuk produksi, tetapi jangan ragu untuk menjelajahi. Jika Anda menemukan bug yang jelas, harap ajukan contoh minimal yang dapat direproduksi di https://github.com/rstudio/ggvis/issues . Untuk pertanyaan dan diskusi lainnya, silakan gunakan https://groups.google.com/group/ggvis .

Dibandingkan dengan ggplot2 ggvis masih kekurangan beberapa fitur dan pemoles (tidak ada cara untuk menambahkan judul ke grafik misalnya, judul sumbu tumpang tindih dengan label centang, dan ada lebih banyak, facetting tidak didukung, dll.) Di sisi lain sintaksis ggvis terasa sedikit lebih bersih, dan interaktivitas benar-benar hebat.

Dari pengalaman saya sendiri, ggvis adalah suatu keharusan jika Anda sedang membangun aplikasi yang mengkilap. Maka manfaat memiliki mesin ploting grafik yang ramah web dan R jauh lebih besar daripada kekurangan apa pun yang dimiliki saat ini.

Jika Anda ingin membuat grafik statis untuk eksplorasi data, maka ggplot2 adalah perpustakaan yang matang dengan banyak fitur keren dan dengan komunitas pengguna yang sehat dan banyak sumber daya untuk dipelajari.

Filosofi di balik kedua paket ini serupa, sehingga keterampilan dapat ditransfer dengan mudah dari satu paket ke paket lainnya.

mpiktas
sumber
8

Komunitas R terus menghadirkan paket-paket baru (dan seringkali tumpang tindih) karena berbagai alasan:

1) Seseorang ingin mengubah sesuatu atau menambahkan sesuatu yang tidak tersedia dalam paket yang ada, tetapi banyak yang tumpang tindih (karenanya, banyak paket yang melakukan regresi)

2) Seseorang menulis paket sebagai tugas

3) Menulis paket itu menyenangkan (jika Anda suka hal semacam itu)

4) Mereka tidak tahu paket aslinya ada

Peter Flom - Pasang kembali Monica
sumber
9
Mengenai contoh spesifik dan poin Anda 4: ggvis ditulis oleh orang yang sama dengan ggplot2. Poin penting di sini adalah bahwa penggunaan ggplot2 sangat luas sehingga tidak mungkin untuk mengimplementasikan perubahan tanpa merusak banyak kode / paket dependen yang ada.
Roland
1
Apakah jenis reinvention paket yang sudah ada ini ditakdirkan terjadi seperti resesi ekonomi dalam masyarakat kapitalisme?
qazwsx
2
@ Peter: Sebagai orang luar ke R, menurut saya ini seperti komentar yang adil tetapi (paling tidak biasa) Anda tidak menjawab pertanyaan!
Nick Cox
@NickCox Saya menjawab salah satu pertanyaan yang ada di pertanyaan. :-).
Peter Flom - Reinstate Monica
1
@Peter Poin yang sangat adil. Referensi silang ke stats.stackexchange.com/questions/58966/… adalah karena itu saya pikir relevan.
Nick Cox