Moet ik ggplot2 of ggvis leren om te plotten met R? Ik wil niet per se beide leren als een van hen in elk opzicht superieur is. Waarom blijft de R-community nieuwe pakketten maken met overlappende functionaliteiten? De introductie blogpost noemt geen woord waarom ggvis is gemaakt, aangezien er al een geavanceerd plotpakket ggplot2 bestaat.

Reacties

  • ggvis is een heel andere ketel vis . Het echte alternatief is tussen ggplot en lattice .
  • Ik denk dat het antwoord afhangt van wat je ‘ re na. Als je ‘ op zoek bent naar statische geavanceerde plots, wil je ‘ leren ggplot2. Overweeg voor webvisualisatie ggvis.

Antwoord

Begin met ggplot2. Het creëert statische plots.

Afgezien van statische plots, kan ggvis ook worden gebruikt voor het maken van interactieve plots. Je hebt de syntaxis van ggplot2 geleerd, dan volgt de syntaxis voor het toevoegen van interactiviteit om ggivs-plots te maken.

Opmerkingen

  • Dit is niet nauwkeurig (misschien het was correct op het moment van schrijven). ggvis kan zeker worden gebruikt om statische plots te maken. Het feit dat het ook interactieve plots mogelijk maakt, is een kenmerk, geen beperking. Een eenvoudig voorbeeld van een statische plot: library('ggvis'); mtcars %>% ggvis(~wt, ~mpg) %>% layer_points(fill = ~factor(cyl))

Answer

Ik wil het antwoord van Dianne Cook wat uitbreiden. Zoals ze zei, ggplot2 is voor het maken van statische plots, ggvis is voor interactieve plots. Daar zijn een aantal implicaties aan verbonden:

Bestandstype ggvis-uitvoer is HTML inclusief CSS- en javascript-bestanden. Ggvis voert niet van nature gewone afbeeldingsbestanden uit. Ggplot2 voert gewone afbeeldingen uit, die dan kunnen ingesloten zijn in HTML of pdf of gif of per e-mail worden verzonden, of wat dan ook. ggvis, als u het bestand wilt e-mailen, zipt u een map met HTML-bestanden op om in een browser te bekijken.

Animatie Een gevolg hiervan is dat als je een animatie wilt maken, je de frames in ggplot2 en voeg ze samen, maar er is geen natuurlijke manier om dit te doen met ggvis. Ggvis die interactief werkt, animeert live, maar dit zijn verschillende soorten animatie. Als er meer aan de hand is per frame dan ggvis kan verwerken , kun je daar niet omheen (althans op een natuurlijke manier) door de afbeeldingen te genereren en de film op de achtergrond te maken. Evenzo kan de gebruiker geen film of gif-bestand downloaden van ggvis om opnieuw af te spelen.

Op dit moment ben ik in mijn huidige project overgestapt van ggplot2 naar ggvis omdat ggplot2 veel te traag was om interactief te animeren. Maar ik zou het ook leuk vinden dat de gebruiker, na met de instellingen gespeeld te hebben, op “go” kan klikken en een full-speed, vloeiende animatiefilm kan downloaden van wat ze hebben gedaan. Ik weet niet hoe ik dit moet doen met ggvis, maar het zou cake zijn met ggplot2.

Snelheid ggvis is veel, veel, veel sneller dan ggplot2, vooral bij het wijzigen van gegevens. Elke ggplot2-plot heeft een seconde of een paar vertraging. ggvis heeft een seconde of zo wanneer u de eerste plot maakt, daarna verloopt het wijzigen van de gegevens naadloos – ggvis kan “reactief” aan gegevens worden gekoppeld, zodat het zichzelf bijwerkt wanneer de gegevens veranderen. Met ggplot2 wordt de hele plot opnieuw getekend.

Stijl & Uiterlijk ggplot2 plots lijken een beetje op het eerste gezicht mooier dan ggvis-plots. ggplot2-plots zijn vrij elegant. ggvis-plots zijn eenvoudiger, maar ze groeien op mij. Er zijn ook extensies voor ggplot2, zoals de xkcd en wesanderson pakketten, waar er geen analoog is voor ggvis. Ggplot2 plots zien er allemaal uit alsof ze gemaakt zijn door dezelfde persoon (de auteur van ggplot2) en dat wordt na een tijdje moe.

Compleetheid Er zijn plot-typen die u kunt maken in ggplot2 die ggvis niet ondersteunt, tenminste dusver. Er is bijvoorbeeld geen rug-plotelement in ggvis. Ik heb een of twee choropleths gezien die zijn gemaakt met ggvis, maar er is nog geen natuurlijke ingebouwde ondersteuning. Ggplot2 heeft poolcoördinaten (dwz cirkeldiagrammen) , ggvis niet. Ook ontbreekt in ggvis (en beschikbaar in ggplot2 of in een ggplot2-extensie): boxplots; contourplots; natuurlijke heatmaps; natuurlijke correlatiegrafieken; dotplots; vioolplots; netwerkplots; dendrogrammen. Natuurlijk weet ik dat sommige zeer slimme mensen kunnen deze allemaal in ggvis maken, maar ik “ben niet zo slim.

Annotaties ggplot2 heeft een erg mooi, misschien onderbenut, annotatiekader, ggvis niet.

Subplots & Facetten ggplot2 heeft een zeer mooie , maar misschien nogal beperkte, “facet” -functie. U kunt ook meerdere ggplot2-plots combineren met behulp van het rasterpakket. Vanaf nu kun je geen van beide doen met ggvis. ggvis-plots kunnen niet worden gecombineerd tot een enkele afbeelding (omdat het geen afbeeldingen zijn, maar “live” webpaginas zijn), en het ondersteunt geen enkele vorm van facetten of subplotten. Dit zou in de pijplijn moeten zijn.

Visuele flexibiliteit ggplot2 wil dat elke plot er hetzelfde uitziet, wat betekent dat de auteur stilistisch de voorkeur geeft. Er is bijvoorbeeld geen plot met meerdere y-assen in ggplot2. ggvis kan. ggvis is veel flexibeler dan ggplot2. Het is veel gemakkelijker om dingen te doen zoals legendes verbergen, meerdere legendes combineren in één, verschillende schalen gebruiken voor verschillende dingen op hetzelfde perceel, enz.

Diepe aanpasbaarheid Als u bijvoorbeeld een nieuwe slimme schaal, het is niet al te moeilijk om dat te doen in ggplot2 (hoewel het behoorlijk verwarrend is). Er lijkt gewoon geen manier te zijn om veel van dat te doen in ggvis. Misschien is het gewoon nog niet.

Tijdreeksen ggplot2 houdt er niet van om tijdreeksen te plotten. Het kan , maar het wil het niet . Eigenlijk willen ze geen van beiden; beiden staan erop om data in een data.frame te krijgen, en ze kunnen xts of dierentuinobjecten. Ze hebben ook geen ingebouwde functies voor het opdelen van een tijdreeks. Maar ggvis vecht niet zo hard terug tegen de tijdreeks als ggplot2. Dat komt deels omdat het zo snel is om de gegevens in een ggvis-plot bij te werken, veronderstel ik. Als je een tijdreeks wilt plotten, moet je beide tot onderwerping verslaan, maar ggvis is er veel minder passief-agressief over .

Zijn ze dezelfde syntaxis? Soort van … Ze hebben veel gemeen , en als je leert denken in de stijl van de een, kun je je aanpassen aan de stijl van de ander. Beide zijn in het bijzonder zo ontworpen dat alle plotoproepen in elkaar worden doorgesluisd, allemaal op een enkele regel Het belangrijkste voordeel hiervan is dat het debuggen en profileren erg moeilijk maakt, en in feite de functies voor debuggen / profileren in zaken als Rstudio onbruikbaar maakt. Verder zijn ze syntactisch heel anders. Sommige dingen die moeilijk zijn in ggplot2, zijn gemakkelijk in ggvis. Sommige dingen die gemakkelijk zijn in ggplot2, zijn onmogelijk in ggvis. En vice versa. (Ik heb een beetje een voorkeur voor de manier waarop ggvis dingen doet, wat ik gemakkelijker te begrijpen vind.)

Bugs ggvis heeft er nog heel wat. Soms gedraagt het zich gewoon vreemd. Soms verdwijnen plots echter willekeurig om redenen die uren in beslag nemen en weinig zin hebben. De ontwikkelaars geven dit vrijuit toe, ggvis is nog niet productieklaar. Als je met enige complexiteit omgaat, zul je ontdekken dat het geen grapje is.

Waar het op neerkomt: Het leren van tussentijdse plotten in elk duurt ongeveer 16 uur. Dus, realistisch gezien, zult u waarschijnlijk beide leren.

Opmerkingen

  • Geweldige vergelijking
  • Wat is sneller ggvis of lattice of rgl? (voor grote datasets)
  • +1 fantastisch schrijven. Ik ben het eens met alles hier op basis van mijn ervaringen met beide tot nu toe.
  • Hallo, hoe zit het met ggvis vs rcharts?
  • TIME SERIES: ggplot2 wint definitief met de uitbreiding ggfortify. Zie deze uitstekende documentatie erover: rpubs.com/sinhrks/basics .

Antwoord

Ik denk dat het bericht dat verschijnt na library(ggvis) voor zichzelf spreekt:

De ggvis-API evolueert momenteel snel. We raden je ten zeerste aan om hier niet op te vertrouwen voor de productie, maar voel je vrij om te verkennen. Als je een duidelijke bug tegenkomt, dien dan een minimaal reproduceerbaar voorbeeld in op https://github.com/rstudio/ggvis/issues . Gebruik voor vragen en andere discussies https://groups.google.com/group/ggvis .

In vergelijking met ggplot2 mist ggvis nog steeds enkele functies en verfijning (geen manier om titel aan een grafiek toe te voegen, bijvoorbeeld astitels die overlappen met vinkjes, en er zijn er meer, facetten worden niet ondersteund, enz.) aan de andere kant voelt de syntaxis van ggvis een beetje schoner aan en is interactiviteit echt geweldig.

Uit eigen ervaring is ggvis een must als je een glanzende app bouwt. De voordelen van het hebben van een web- en R-vriendelijke engine voor het plotten van grafieken wegen zwaarder dan de eventuele tekortkomingen die het momenteel heeft.

Als je statische grafieken wilt maken voor gegevensverkenning, dan is ggplot2 een volwassen bibliotheek met veel coole functies en met een gezonde gemeenschap van gebruikers en veel bronnen om van te leren.

De filosofie achter beide pakketten is vergelijkbaar, dus de vaardigheden kunnen vrij gemakkelijk van het ene pakket naar het andere worden overgedragen.

Antwoord

De R-gemeenschap blijft nieuwe (en vaak overlappende) pakketten bedenken om verschillende redenen:

1) Iemand wil iets veranderen of iets toevoegen dat niet beschikbaar is in een bestaand pakket, maar veel ervan overlapt (vandaar dat er veel pakketten zijn die regressie uitvoeren).

2) Iemand schrijft een pakket als opdracht

3) Pakketten schrijven is leuk (als je dat soort dingen leuk vindt)

4) Ze weten niet dat het originele pakket bestaat

Opmerkingen

  • Met betrekking tot het specifieke voorbeeld en uw punt 4: ggvis is geschreven door dezelfde mensen als ggplot2. Het belangrijke punt hier is dat het gebruik van ggplot2 zo wijdverspreid is dat het onmogelijk is geworden om veranderingen door te voeren zonder veel bestaande code / afhankelijke pakketten te breken.
  • Is dit soort heruitvinding van een reeds bestaand pakket bedoeld om gebeuren net als economische recessies in kapitalistische samenlevingen?
  • @Peter: Als buitenstaander van R lijkt dit mij een eerlijke opmerking, maar (hoogst ongebruikelijk) ‘ t beantwoord de vraag!
  • @NickCox Ik heb een van de vragen in de vraag beantwoord. :-).
  • @Peter Heel terecht. Een kruisverwijzing naar stats.stackexchange.com/questions/58966/… vind ik daarom relevant.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *