Czy podczas pisania z R powinienem nauczyć się ggplot2 lub ggvis?


38

Czy podczas pisania z R powinienem nauczyć się ggplot2 lub ggvis? Niekoniecznie chcę się uczyć obu, jeśli jeden z nich jest pod każdym względem lepszy. Dlaczego społeczność R wciąż tworzy nowe pakiety z nakładającymi się funkcjami? W blogu wprowadzającym nie wspomniano ani słowa o tym, dlaczego ggvis jest tworzony, skoro istnieje już wyrafinowany pakiet kreślarski ggplot2.


5
ggvis to zupełnie inny czajnik z rybami. Prawdziwą alternatywą jest ggplot i krata .
Gala

1
Myślę, że odpowiedź zależy od tego, czego szukasz. Jeśli szukasz statycznych zaawansowanych wykresów, musisz się nauczyć ggplot2. W przypadku wizualizacji internetowej rozważ ggvis.
Roman Luštrik

Odpowiedzi:


39

Zacznij od ggplot2. Tworzy wykresy statyczne.

Oprócz wykresów statycznych, ggvis może być również używany do tworzenia wykresów interaktywnych. Gdy nauczysz się składni ggplot2, wówczas składnia dodawania interaktywności w celu utworzenia wykresów ggivs będzie przebiegać naturalnie.


4
Jest to niedokładne (być może było dokładne w momencie pisania). ggvis można zdecydowanie wykorzystać do tworzenia wykresów statycznych. Fakt, że pozwala również na interaktywne fabuły, jest cechą, a nie ograniczeniem. Jeden prosty przykład statycznej fabuły:library('ggvis'); mtcars %>% ggvis(~wt, ~mpg) %>% layer_points(fill = ~factor(cyl))
Andre Terra

47

Chcę trochę rozwinąć odpowiedź Dianne Cook. Jak powiedziała, ggplot2 służy do tworzenia wykresów statycznych, ggvis służy do wykresów interaktywnych. Istnieje wiele implikacji:

Typ pliku Dane wyjściowe ggvis to HTML, w tym pliki CSS i javascript. ggvis w naturalny sposób nie generuje zwykłych plików obrazów. ggplot2 generuje zwykłe obrazy, które można następnie osadzić w HTML, pdf, gif lub e-mailem lub cokolwiek innego. ggvis, jeśli chcesz wysłać plik pocztą e-mail, rozpakowujesz katalog plików HTML do przeglądania w przeglądarce.

Animacja Konsekwencją tego jest to, że jeśli chcesz utworzyć animację, możesz tworzyć ramki w ggplot2 i łączyć je, ale nie ma naturalnego sposobu, aby to zrobić za pomocą ggvis. Interaktywne działanie ggvis będzie animować „na żywo”, ale są to różne rodzaje animacji. Jeśli na klatkę dzieje się więcej, niż może przetworzyć ggvis, nie możesz tego obejść (przynajmniej w naturalny sposób), generując obrazy i tworząc film w tle. Podobnie użytkownik nie może pobrać filmu lub pliku gif z ggvis do odtworzenia.

Obecnie w moim obecnym projekcie przerzuciłem się z ggplot2 na ggvis, ponieważ ggplot2 był o wiele za wolny, by animować interaktywnie. Ale chciałbym również, aby użytkownik po zabawie ustawieniami mógł kliknąć „idź” i pobrać film z pełną szybkością i płynną animacją tego, co zrobił. Nie wymyśliłem, jak to zrobić za pomocą ggvis, ale byłoby to ciasto przy użyciu ggplot2.

Szybkość ggvis jest znacznie, dużo, znacznie większa niż ggplot2, szczególnie przy zmianie danych. Każdy wykres ggplot2 ma drugie lub kilka opóźnień. ggvis ma sekundę po utworzeniu wykresu, po czym zmiana danych przebiega bezproblemowo - ggvis może być „reaktywnie” powiązany z danymi, dzięki czemu aktualizuje się za każdym razem, gdy dane się zmieniają. W przypadku ggplot2 cała fabuła zostanie przerysowana.

Styl i wygląd Wykresy ggplot2 na pierwszy rzut oka wydają się nieco ładniejsze niż wykresy ggvis. Wykresy ggplot2 są dość eleganckie. Wykresy ggvis są prostsze, ale rosną na mnie. Istnieją również rozszerzenia dla ggplot2, takie jak pakiety xkcd i wesanderson, w których nie ma analogii dla ggvis. Wszystkie wykresy ggplot2 wyglądają, jakby zostały stworzone przez tę samą osobę (autora ggplot2) i po pewnym czasie się męczy.

Kompletność Istnieją typy wykresów, które możesz utworzyć w ggplot2, których ggvis nie obsługuje, przynajmniej do tej pory. Na przykład w ggvis nie ma elementu fabuły „dywanik”. Widziałem jedną lub dwie choroplety wykonane przy pomocy ggvis, ale nie ma jeszcze wbudowanego wsparcia. ggplot2 ma współrzędne biegunowe (tj. wykresy kołowe), ggvis nie. Brakuje również w ggvis (i jest dostępny w ggplot2 lub w rozszerzeniu ggplot2): boxplots; wykresy konturowe; naturalne mapy cieplne; naturalne wykresy korelacji; kropki; skrzypce; wykresy sieciowe; dendrogramy. Oczywiście jestem pewien, że niektórzy bardzo sprytni ludzie mogą to wszystko stworzyć w ggvis, ale nie jestem taki sprytny.

Adnotacje ggplot2 ma bardzo przyjemną, być może niedostatecznie wykorzystaną strukturę adnotacji. ggvis nie.

Podploty i aspekty ggplot2 ma bardzo przyjemną, ale być może raczej ograniczoną funkcję „facetingu”. Możesz także łączyć wiele wykresów ggplot2 za pomocą pakietu grid. W tej chwili nie możesz używać ggvis. Wykresów ggvis nie można łączyć w jeden obraz (ponieważ nie są obrazami, są „żywymi” stronami internetowymi) i nie obsługuje żadnego aspektu ani podpowiedzi. To ma być w przygotowaniu.

Elastyczność wizualna ggplot2 chce, aby każda fabuła wyglądała tak samo, co oznacza, że ​​autor woli stylistycznie. Na przykład nie ma sposobu, aby mieć wykres z wieloma osiami Y w ggplot2. ggvis może. ggvis jest znacznie bardziej elastyczny niż ggplot2. O wiele łatwiej jest robić takie rzeczy, jak ukrywanie legend, łączenie wielu legend w jedną, używanie różnych skal dla różnych rzeczy na tej samej fabule itp.

Głęboka konfigurowalność Jeśli chcesz stworzyć, powiedzmy, nową sprytną skalę, nie jest to zbyt trudne w ggplot2 (chociaż jest to dość mylące). Po prostu wydaje się, że nie ma sposobu, aby zrobić dużo tego w ggvis. Może po prostu jeszcze nie.

Szeregi czasowe ggplot2 nie lubi rysować szeregów czasowych. To możliwe , ale nie chcą . Właściwie żadne z nich nie chce; oba nalegają na podawanie danych w ramce data.frame i nie mogą obsługiwać obiektów xts ani zoo. Nie mają też wbudowanych funkcji wycinania szeregów czasowych. Ale ggvis nie walczy z szeregami czasowymi tak mocno, jak ggplot2. Po części dlatego, że tak szybko aktualizuje dane w wykresie ggvis, jak sądzę. Jeśli chcesz zaplanować serie czasowe, musisz pokonać jednego z nich, ale ggvis jest o wiele mniej pasywny i agresywny.

Czy mają tę samą składnię? W pewnym sensie… łączy ich wiele, a nauka myślenia w stylu jednego z nich pomoże dostosować się do stylu drugiego. W szczególności oba są zaprojektowane w taki sposób, że wszystkie wywołania plotowania są ze sobą połączone w jednym wierszu kodu. Główną zaletą tego jest to, że sprawia, że ​​debugowanie i profilowanie jest naprawdę trudne, i zasadniczo czyni funkcje debugowania / profilowania w takich rzeczach, jak Rstudio bezużyteczne. Poza tym są one zupełnie różne pod względem składniowym. Niektóre rzeczy trudne w ggplot2 są łatwe w ggvis. Niektóre rzeczy, które są łatwe w ggplot2, są niemożliwe w ggvis. I wzajemnie. (Mam trochę preferencji co do sposobu, w jaki ggvis robi rzeczy, co wydaje mi się łatwiejsze do zrozumienia.)

Błędy ggvis wciąż ma sporo. Czasami zachowuje się dziwnie. Czasami jednak fabuły losowo znikają z powodów, których obejście zajmuje wiele godzin i nie ma większego sensu. Deweloperzy przyznają to swobodnie, ggvis nie jest jeszcze gotowy do produkcji. Jeśli masz do czynienia z dowolnej złożoności, to będzie dowiedzieć się, że nie żartuję.

Podsumowując: Nauka każdego z nich zajmuje około 16 godzin. Tak więc, realistycznie, prawdopodobnie nauczysz się obu.


1
Świetne porównanie
skan

Co to jest szybsza ggvis, krata lub rgl? (dla dużych zestawów danych)
skan

+1 fantastyczny napis. Zgadzam się ze wszystkim tutaj na podstawie moich dotychczasowych doświadczeń.
David Crook,

Cześć, co z ggvis vs rcharts?
skan

SERIA CZASU: ggplot2 ostatecznie wygrywa z rozszerzeniem ggfortify. Zobacz tę doskonałą dokumentację na ten temat: rpubs.com/sinhrks/basics .
Archimede

10

Myślę, że komunikat pojawiający się po nim library(ggvis)jest oczywisty:

Interfejs API ggvis obecnie szybko się rozwija. Zdecydowanie zalecamy, aby nie polegać na tym podczas produkcji, ale zachęcamy do odkrywania. Jeśli napotkasz wyraźny błąd, złóż minimalny odtwarzalny przykład na https://github.com/rstudio/ggvis/issues . W przypadku pytań i innych dyskusji użyj https://groups.google.com/group/ggvis .

W porównaniu do ggplot2 ggvis wciąż nie ma pewnych cech i dopracowania (na przykład nie można dodać tytułu do wykresu, tytuły osi pokrywają się z etykietami tykania, a jest ich więcej, fasetowanie nie jest obsługiwane itp.) Z drugiej strony składnia ggvis wydaje się być trochę czystsze, a interaktywność jest naprawdę niesamowita.

Z mojego własnego doświadczenia ggvis jest koniecznością, jeśli budujesz błyszczącą aplikację. Następnie korzyści wynikające z posiadania przyjaznego dla sieci i R silnika kreślenia wykresów znacznie przewyższają wszelkie obecne braki.

Jeśli chcesz robić statyczne wykresy do eksploracji danych, ggplot2 to dojrzała biblioteka z wieloma fajnymi funkcjami i zdrową społecznością użytkowników oraz wieloma zasobami do nauki.

Filozofia obu pakietów jest podobna, więc umiejętności można łatwo przenosić z jednego pakietu do drugiego.


8

Społeczność R ciągle wymyśla nowe (i często nakładające się) pakiety z różnych powodów:

1) Ktoś chce coś zmienić lub dodać coś, co nie jest dostępne w istniejącym pakiecie, ale wiele z nich nakłada się (stąd wiele pakietów, które regresują)

2) Ktoś pisze paczkę jako zadanie

3) Pisanie paczek jest fajne (jeśli lubisz tego rodzaju rzeczy)

4) Nie wiedzą, że istnieje oryginalne opakowanie


9
Jeśli chodzi o konkretny przykład i twój punkt 4: ggvis jest autorstwa tych samych ludzi co ggplot2. Ważną kwestią jest to, że użycie ggplot2 jest tak szeroko rozpowszechnione, że niemożliwe stało się wdrożenie zmian bez zerwania wielu istniejących pakietów / zależnych od kodu.
Roland

1
Czy tego rodzaju reorganizacja istniejącego pakietu ma się wydarzyć podobnie jak recesja gospodarcza w społeczeństwach kapitalizmu?
qazwsx

2
@Peter: Jako osoba z zewnątrz R wydaje mi się to uczciwym komentarzem, ale (najbardziej nietypowo) nie odpowiadasz na pytanie!
Nick Cox

@NickCox Odpowiedziałem na jedno z pytań, które są w pytaniu. :-).
Peter Flom - Przywróć Monikę

1
@Peter Bardzo sprawiedliwy punkt. Odsyłacz do stats.stackexchange.com/questions/58966/... jest zatem moim zdaniem odpowiedni.
Nick Cox
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.