Interactieve grafiek met plotly

In deze twee maanden wilde ik toch eens kijken naar interactieve mogelijkheden die het programma R/RStudio ons biedt. Plotly is zo’n mogelijkheid en daarover gaat dit blog. Shiny is de andere mogelijkheid en daar zal ik een volgende keer aandacht aan besteden. Plotly heeft een eigen website waar veel informatie over het programma is te vinden hier adres website. Er is ook een uitgebreide handleiding over Plotly geschreven hier handleiding. Onlangs stond er op de blog van RBloggers een goede introductie van Laura Ellis, die mij veel vertelde over het gebruik van Plotly. Haar bijdrage zie hier heb ik hier naar het Nederlands overgezet en hier en daar iets bewerkt.

Laura Ellis op R-bloggers (13 maart 2019), bewerking Harrie Jonkman. https://Harriejonkman.nl
04-03-2019

Interactieve ggplot2 grafieken met plotly

Een van de belangrijkste redenen dat ik verliefd werd op R, schrijft Laura Ellis in haar blog, kwam door ggplot2. Zoals Jennifer Thompson het zo welsprekend verwoordde:

“Ik gebruikte R voor ggplot, maar tot dan toe hield ik er nooit van”.

—Jennifer Thompson

Voor iemand die zeer geïnteresseerd is in het vertellen van verhalen, wordt ggplot2 al snel het favoriete datavisualisatietool. Het is eigenlijk het Zwitserse zakmes voor datavisualisatie. Het kan een grafiek met allerlei afmetingen aan. Deze mogelijkheid is ongelofelijk handig tijdens data verkenningsfasen. Soms wil je echter wel eens naar trends kijken zonder dat het je al te veel moeite kost. Dan bekijk je dichte scatterplots met uitschieters. ggplot2 is hier geweldig in. Maar soms kun je niet alle mogelijke dimensies in de statische grafieken onderzoeken. Dan kun je plotly gebruiken.

Voer plotly in. Het plotly-pakket en de ggploty-functie gaan goed samen, ze bewaren de hoge kwaliteit van ggplot2 grafieken en kunnen het ook nog interactief maken.

In deze tutorial onderzoeken we de mediaan van de gerapporteerde lonen van creatieve beroepen. We onderzoeken de gegevens van deze beroepsgroep van de stad Austin (Texas, USA) voor de jaren 2016 en 2017. Deze dataset is afkomstig van het open dataportaal Austin hier. Het is verbazendwekkend om te zien hoe het AustinGO2.0-team steeds nieuwe en spannende lokale datasets beschikbaar stelt om te verkennen!

Installeer en laden van pakketten

Voordat we verder gaan, moeten we eerst de pakketten installeren. Als je dat een keer hebt gedaan moet je ze wel steeds voor gebruik laden.

Dataset laden

Om het reproduceer te maken moet je de dataset van de Ausatin open data portal halen en uploaden en Laura Ellis heeft dat hier in haar github repo geplaatst githubrepo


[1] 54  4

   SOC.Code          Occupation        X2016.Median.hourly.earnings
 Length:54          Length:54          Min.   : 6.79               
 Class :character   Class :character   1st Qu.:14.29               
 Mode  :character   Mode  :character   Median :20.24               
                                       Mean   :19.68               
                                       3rd Qu.:24.25               
                                       Max.   :34.37               
 X2017.Median.hourly.earnings
 Min.   : 6.88               
 1st Qu.:15.29               
 Median :20.10               
 Mean   :20.12               
 3rd Qu.:25.69               
 Max.   :34.37               

'data.frame':   54 obs. of  4 variables:
 $ SOC.Code                    : chr  "11-2011" "13-1011" "25-1099" "25-4011" ...
 $ Occupation                  : chr  "Advertising and promotions managers" "Agents and business managers of artists, performers, and athletes" "Postsecondary teachers" "Archivists" ...
 $ X2016.Median.hourly.earnings: num  30.1 21.8 26.9 26.7 32.6 ...
 $ X2017.Median.hourly.earnings: num  29.7 22.3 26.3 27.3 30.5 ...

  SOC.Code
1  11-2011
2  13-1011
3  25-1099
4  25-4011
5  25-4012
6  25-4013
                                                         Occupation
1                               Advertising and promotions managers
2 Agents and business managers of artists, performers, and athletes
3                                            Postsecondary teachers
4                                                        Archivists
5                                                          Curators
6                               Museum technicians and conservators
  X2016.Median.hourly.earnings X2017.Median.hourly.earnings
1                        30.11                        29.73
2                        21.83                        22.31
3                        26.92                        26.31
4                        26.66                        27.31
5                        32.56                        30.46
6                        24.33                        25.74

Transformeer de data

We voeren wat eenvoudige transformaties uit om de data voor te bereiden voor een makkelijke scatterplot. Eerst geven we de kolommen een andere naam en daarna hebben we een nieuwe kolom gemaakt om de veranderingen in het jaar 2016 tot 2017 te berekenen dat iets zegt over veranderingen in het mediane loon per beroep.

Creëer de scatterplot

We creëerden een eenvoudige ggplot2-scatterplot van de beroepen met de 2017 mediane loon vs percentage jaarverbetering. We voegden een eenvoudige horizontale lijn toe om de nul in de plot te markeren. Dit stelt ons in staat om de jaarveranderingen in het mediane loon gemakkelijker te verwerken. Vervolgens zetten we nog een laatste stap en voeren we onze ggplot2-scatterplot in de ggplotly-functie in. Zo ontstaat een interactieve grafiek!

Voeg de labels toe

De bovenstaande grafiek is geweldig omdat we met succes gebruik hebben gemaakt van plotly om de ggplot2-scatterplot interactief te maken. De data hebben echter niet alles wat we willen en het is niet erg mooi geformatteerd. Laten we dit oplossen!

Corinne Leopold, van het team van Laura Ellis, vond een veel efficiëntere manier om labels toe te wijzen in de plots dan de oplossing die Laura eerder vond eerdere oplossing. We voegen eenvoudigweg de details toe via de esthetische tekstuele eigenschap van de ggplot. Vervolgens wijzen we het toe aan de tooltip in de ggplotly-functie.

Over het opslaan en delen van de grafiek vermeldt Laure Ellis ook nog het een en ander. Maar daar kijken we hier verder niet naar. Mij ging het erom plotly zelf beter in de vingers te krijgen. De volgende keer maar eens kijken hoe het met Shiny gaat.