R ile çizim yapmak için, ggplot2 veya ggvis'i öğrenmeli miyim?


38

R ile çizim yapmak için, ggplot2 veya ggvis'i öğrenmeli miyim? Her ikisinden de birinin herhangi bir konuda üstün olup olmadığını öğrenmek istemiyorum. Neden R topluluğu örtüşen işlevlere sahip yeni paketler oluşturmaya devam ediyor? Tanıtım Blog yazısı ggvis sofistike komplo paket ggplot2 zaten var olduğu göz önüne alındığında oluşturulan neden tek kelime bahsetmiyor.


5
Ggvis tamamen farklı bir su ısıtıcısıdır. Gerçek alternatif ggplot ve kafes arasındadır .
Gala,

1
Sanırım cevap neyin peşinde olduğuna bağlı. Statik gelişmiş araziler arıyorsanız, öğrenmek istersiniz ggplot2. Web görselleştirmesi için düşünün ggvis.
Roman Luštrik

Yanıtlar:


39

Ggplot2 ile başlayın. Statik araziler yaratır.

Statik parsellerin yanı sıra, ggvis, etkileşimli parseller oluşturmak için de kullanılabilir. Ggplot2'nin sözdizimini öğrendikten sonra, ggivler oluşturmak için etkileşim eklemek için sözdizimi doğal olarak takip edilecektir.


4
Bu yanlış (belki de yazı yazarken doğruydu). statik grafikler oluşturmak için ggvis kesinlikle kullanılabilir. Ayrıca etkileşimli parsellere izin vermesi de bir sınırlama değil bir özelliktir. Statik arsanın basit bir örneği:library('ggvis'); mtcars %>% ggvis(~wt, ~mpg) %>% layer_points(fill = ~factor(cyl))
Andre Terra

46

Dianne Cook'un cevabını biraz genişletmek istiyorum. Dediği gibi, ggplot2 statik araziler oluşturmak içindir, ggvis etkileşimli araziler içindir. Bunun bir takım etkileri var:

Dosya Türü ggvis çıkışı, CSS ve javascript dosyalarını içeren HTML'dir. ggvis doğal olarak sıradan görüntü dosyalarını vermez. ggplot2, daha sonra HTML veya pdf veya gif olarak veya e-posta ile gönderilebilen veya başka herhangi bir yere gömülebilen sıradan görüntüler üretir. ggvis, dosyayı e-posta ile göndermek istiyorsanız, bir tarayıcıda görüntülenecek bir HTML dosyaları dizini sıkıştırıyorsunuz.

Animasyon Bunun bir sonucu, eğer bir animasyon oluşturmak istiyorsanız, kareleri ggplot2'de yapabilir ve birleştirebilirsiniz, ancak bunu ggvis ile yapmanın doğal bir yolu yoktur. Etkileşimli olarak hareket eden ggvis “canlı” yı canlandırır, ancak bunlar farklı tür animasyonlardır. Eğer ggvis'in işleyebileceğinden daha fazla kare başına devam ederse, görüntüleri oluşturarak ve filmi arka planda yaparak bununla (en azından doğal bir şekilde) çalışamazsınız. Benzer şekilde, kullanıcı ggvis'ten oynatmak için bir film veya gif dosyası indiremez.

Şu anki projemde ggplot2'den ggvis'e geçtim çünkü ggplot2 etkileşimli animasyon yapmak için çok yavaştı. Ancak, ayarları değiştirdikten sonra, kullanıcının "git" düğmesini tıklayıp, yaptıklarını tam hızlı, pürüzsüz bir animasyon filmi indirmesini de istiyorum. Bunu ggvis kullanarak nasıl yapacağımı çözemedim, ama ggplot2 kullanarak kek olacaktı.

hız ggvis, özellikle veri değiştirirken, ggplot2'den çok, çok, çok daha hızlıdır. Her ggplot2 arsa bir saniye veya birkaç gecikme vardır. ggvis'in arsa oluşturduğunuzda, verinin değiştirilmesinin ardından sorunsuz olan bir saniye vardır - ggvis verilere "reaktif olarak" bağlanabilir, böylece veriler değiştiğinde kendini günceller. Ggplot2 ile tüm komplo yeniden çizilecek.

Stil ve görünüm ggplot2 grafikleri, ilk bakışta ggvis grafiğinden biraz daha hoş görünüyor. ggplot2 parselleri oldukça zarif. Ggvis grafikleri daha basittir, ama üzerimde büyüyorlar. Ayrıca, ggvis için analogun olmadığı xkcd ve wesanderson paketleri gibi ggplot2 uzantıları da vardır. ggplot2 grafikleri, aynı kişi (ggplot2'nin yazarı) tarafından yapılmış ve bir süre sonra yorulmaya benziyor.

Tamlık ggplot2'de ggvis'in desteklemediği, en azından şu ana kadar desteklemediğiniz arsa türleri vardır. Örneğin ggvis'te "halı" arsa elemanı yoktur. Gvis ile yapılan bir veya iki choroplet gördüm, ancak henüz doğal bir destek yok. ggplot2 kutupsal koordinatlara (yani pasta grafiklerine) sahiptir, ggvis yoktur. Ayrıca ggvisten de eksik (ve ya ggplot2'de ya da bir ggplot2 uzantısında bulunabilir): boxplots; kontur çizimleri; doğal ısı haritaları; doğal korelasyon çizelgeleri; dotplots; keman grafikleri; ağ arazileri; dendrogramlar. Tabii ki çok zeki insanlar bunları ggvis'te yaratabilirler ama ben o kadar da akıllıca değilim.

Ek açıklamalar ggplot2 çok güzel, belki de az kullanılmış bir ek açıklama çerçevesine sahiptir. Ggvis yapmaz.

Alt Noktalar ve Yönler ggplot2 çok hoş, ama belki de oldukça sınırlı bir "yüzleşme" özelliğine sahiptir. Izgara paketini kullanarak birden fazla ggplot2 grafiğini de birleştirebilirsiniz. Şu an itibariyle, ya ggvis ile yapamazsınız. ggvis çizimleri tek bir görüntüde birleştirilemez (görüntü olmadıkları için, "canlı" web sayfalarıdırlar) ve herhangi bir tür yüzleşme ya da alt çizmeyi desteklemez. Bunun boru hattında olması gerekiyordu.

Görsel Esneklik ggplot2 her çizimin aynı görünmesini istiyor, yani yazarın stilist olarak tercih ettiği gibi. Örneğin, ggplot2'de çoklu y eksenli bir komploya sahip olmanın bir yolu yoktur. ggvis olabilir. ggvis, ggplot2'den çok daha esnektir. Efsaneleri saklamak, birden fazla efsaneyi bir araya getirmek, aynı arsa üzerinde farklı şeyler için farklı ölçekler kullanmak gibi şeyleri yapmak çok daha kolay.

Derin Özelleştirilebilirlik Eğer, diyelim ki, onun değil, yeni akıllı ölçek oluşturmak istiyorsanız çok ggplot2 içinde (oldukça kafa karıştırıcı olsa da) o yapmak zor. Sadece ggvis'te bunu yapmanın bir yolu yok gibi görünüyor. Belki de henüz değil.

Zaman Serileri ggplot2, zaman serilerini çizmeyi sevmez. Bu can , ama gelmez istiyorum . Aslında ikisi de istemiyor; her ikisi de bir data.frame dosyasında veri beslenmekte ısrar eder ve xts veya hayvanat bahçesi nesnelerini idare edemezler. Bir zaman serisini dilimlemek için yerleşik özelliklere de sahip değiller. Ancak ggvis, zaman serisine karşı ggplot2 kadar zor savaşmaz. Bu kısmen, bir ggvis arsadaki verileri güncellemek için çok hızlı olduğu için, sanırım. Bir zaman çizelgesi çizmek istiyorsanız, ikisini de teslim etmek zorunda kalacaksınız, ancak ggvis bu konuda daha pasif-agresif.

Aynı Sözdizimi Var mı? Sırala ... Aralarında ortak olan çok şey var ve birinin tarzında düşünmeyi öğrenmek , diğerinin tarzına uyum sağlamaya yardımcı olacak. Özellikle, her ikisi de tasarlanır, böylece tüm komplo aramaları tek bir kod satırında birbirlerine yönlendirilir. Bunun birincil avantajı, hata ayıklama ve profil oluşturmayı gerçekten zorlaştırması ve temelde Rstudio gibi hata ayıklama / profil oluşturma özelliklerini kullanışsız hale getirmesidir. Bunun dışında, sözdizimsel olarak oldukça farklılar. Ggplot2 içinde zor olan bazı şeyler ggvis'te kolaydır. Ggplot2'de kolay olan bazı şeyler ggvis'te imkansızdır. Ve tam tersi. (Ggvis'in yapması gereken şeyleri tercih etmem biraz daha kolay anlaşılıyor.)

Hatalar hala ggvis epeyce vardır. Bazen sadece garip davranır. Yine de, grafikler, etrafta dolaşması ve çok az mantıklı olması nedeniyle nedenlerle rasgele kayboluyor. Geliştiriciler bunu serbestçe itiraf ediyorlar, ggvis henüz üretime hazır değil. Eğer herhangi bir karmaşıklık ile anlaşma varsa, olur onlar şaka değil keşfetmek.

Bottom Line: Her birinde ara komployu öğrenmek yaklaşık 16 saat sürer. Yani, gerçekçi olarak, muhtemelen ikisini de öğreneceksiniz.


1
Harika bir karşılaştırma
skan

Daha hızlı ggvis veya kafes veya rgl nedir? (büyük veri setleri için)
skan

+1 fantastik yazı. Şimdiye kadarki deneyimlerime dayanarak burada her şeyi kabul ediyorum.
David Crook

Merhaba, Peki ya ggvis rcharts?
skan

ZAMAN SERİLERİ: ggplot2 ggfortify genleşmesi ile kesin olarak kazanır. Bununla ilgili bu mükemmel belgelere bakın: rpubs.com/sinhrks/basics .
Archimede

10

Sanırım sonra gelen mesaj library(ggvis)açıklayıcı:

Ggvis API şu anda hızla gelişmektedir. Prodüksiyon için buna güvenmemenizi, ancak keşfedilmekten çekinmeyin. Net bir hatayla karşılaşırsanız, lütfen https://github.com/rstudio/ggvis/issues adresinden en az yeniden üretilebilir bir örnek verin . Sorularınız ve diğer tartışmalarınız için lütfen https://groups.google.com/group/ggvis adresini kullanın .

Ggplot2'ye kıyasla ggvis hala bazı özelliklerden yoksun ve cilalandı (örneğin, grafiğe başlık eklemenin bir yolu yoktur, kene etiketleriyle üst üste gelen eksen başlıkları ve daha fazlası vardır, fasetleme desteklenmez, vb.) Öte yandan, ggvis sözdizimi hissediyor biraz temizleyici ve etkileşim gerçekten harika.

Kendi deneyimlerime göre, parlak bir uygulama inşa ediyorsanız ggvis bir zorunluluktur. Daha sonra, bir web ve R dostu grafik çizim motoruna sahip olmanın faydaları, şu anda sahip olduğu eksikliklerden ağır basmaktadır.

Veri araştırması için statik grafikler yapmak istiyorsanız, o zaman ggplot2, harika özelliklere ve sağlıklı bir kullanıcı topluluğuna ve öğrenilecek çok sayıda kaynağa sahip olgun bir kütüphanedir.

Her iki paketin ardındaki felsefe de benzerdir, böylece beceriler bir paketten diğerine oldukça kolay bir şekilde aktarılabilir.


8

R topluluğu, çeşitli nedenlerden dolayı yeni (ve genellikle üst üste binen) paketler oluşturmaya devam ediyor:

1) Birisi bir şeyi değiştirmek veya mevcut bir pakette bulunmayan bir şey eklemek istiyor, ancak çoğu üst üste biniyor (dolayısıyla, regresyon yapan birçok paket)

2) Biri bir paketi ödev olarak yazar.

3) Yazma paketleri eğlencelidir (eğer böyle bir şey istersen)

4) Orjinal paketin var olduğunu bilmiyorlar


9
Belirli bir örnek ve puanınız 4 ile ilgili olarak: ggvis, ggplot2 ile aynı kişiler tarafından yazılmıştır. Burada önemli olan nokta, ggplot2 kullanımının o kadar yaygın olmasıdır ki, mevcut kod / bağımlı paketlerin çoğunu kırmadan değişiklik yapmak imkansız hale geldi.
Roland

1
Önceden var olan bu paketin yeniden keşfedilmesi, kapitalizm toplumlarındaki ekonomik durgunluklar gibi gerçekleşecek midir?
qazwsx

2
@Peter: R'ye karşı bir yabancı olarak bu bana adil bir yorum gibi gözüküyor, ancak (alışılmadık şekilde) soruyu cevaplamıyorsunuz!
Nick Cox

@NickCox Sorudaki sorulardan birini cevapladım. :-).
Peter Flom - Monica'yı yeniden konumlandırın

1
@Peter Çok adil nokta. Stats.stackexchange.com/questions/58966/… için çapraz referans bu nedenle geçerli olduğunu düşünüyorum.
Nick Cox
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.