Ohjelmointi

Kuinka kirjoittaa omat ggplot2-funktiot R: ään

Tidyverse-paketeilla, kuten ggplot2 ja dplyr, on toimintosyntaksi, joka on yleensä melko kätevä: Sarakkeiden nimiä ei tarvitse laittaa lainausmerkeihin. Esimerkiksi:

dplyr :: suodatin (mtcars, mpg> 30)

Huomaa, että sarakkeen nimeä mpg ei ole lainattu.

Tämä ominaisuus ei ole kuitenkaan ollut kätevä, jos haluat kirjoittaa omat R-funktiosi käyttämällä tideversiota. Tämä johtuu siitä, että R-perusfunktiot tarvitsevat yleensä lainattuja sarakkeiden nimiä, kun taas yksinkertaiset funktiot eivät yleensä.

Mutta tällä ongelmalla on nyt yksinkertainen ratkaisu rlang-paketin uusimman version ansiosta. Ja että tarkoittaa, että on erittäin helppoa luoda omia ggplot-toimintoja suosikki mukautettuihin kaavioihisi.

Haluan käydä läpi esimerkin käyttäen Zillow'n tietoja arvioitujen mediaaniarvojen kanssa. Alla olevassa koodissa ladaan pari pakettia, asetan tietotiedostoni nimen ja käytän R-pohjaisia ​​tiedostoja lataa tiedosto CSV: n lataamiseen Zillowista. Viimeiset tietojen valmisteluvaiheet: Tuo CSV R: ään ja suodata rivit missä Kaupunki On Boston. (Käytän rio-pakettia tietojen tuontiin, koska rakastan rioa, mutta voit käyttää jotain muuta read_csv () tai leipä ().) Jos seuraat mukana, voit suodattaa toisen kaupungin.

kirjasto (dplyr)

kirjasto (ggplot2)

# Tiedostonimi, johon haluan ladata tiedot:

oma tiedostonimi <- "Zillow_neighborhood_home_values.csv"

# Jos go.infoworld.com/ZillowData ei toimi, täydellinen URL on

# //files.zillowstatic.com/research/public/Neighborhood/Neighborhood_Zhvi_Summary_AllHomes.csv

download.file ("// go.infoworld.com/ZillowData", oma tiedostonimi)

bos_values%

suodatin (Kaupunki == "Boston")

Seuraavaksi luon vaakapalkkikaavion, jossa on joitain mukautuksia, joita käytän usein. Tilaan palkit korkeimmasta pienimpään arvoon, hahmotellaan ne mustalla, väritään sinisellä ja vaihdan ggplot2: n oletusharmaa tausta.

ggplot (data = bos_values, aes (x = järjestä uudelleen (RegionName, Zhvi), y = Zhvi)) +

geom_col (color = "musta", fill = "# 0072B2") +

xlab ("") +

ylab ("") +

ggtitle ("Zillow Home Value Index by Boston Neighborhood") +

teema_klassikko () +

teema (plot.title = elementti_teksti (koko = 24)) +

coord_flip ()

Entä jos haluaisin tehdä oman toimintoni luoda tällainen kaavio nopeasti millä tahansa datakehyksellä? Tarkemmin sanottuna toiminto, jossa on datakehyksen nimen, x-sarakkeen, y-sarakkeen ja kuvaajan otsikon syöttöargumentit?

Alla on yksi yritys luoda funktio nimeltä mybarplot haluamillani mukautuksilla ilman rlang-pakettia. Se ei kuitenkaan toimi.

mybarplot <- funktio (mydf, myxcol, myycol, mytitle) {

ggplot (data = mydf, aes (x = järjestä uudelleen (myxcol, myycol), y = myycol)) +

geom_col (color = "musta", fill = "# 0072B2") +

xlab ("") +

ylab ("") +

coord_flip () +

ggtitle (mytitle) +

teema_klassikko () +

teema (plot.title = element_text (koko = 24))

}

Näytän sinulle, mitä tapahtuu, jos yritän soittaa kyseiseen toimintoon käyttämällä noteeraamattomia sarakkeiden nimiä. Esimerkiksi:

mybarplot (bos_values, RegionName, Zhvi,

"Zillow Home Value Index by Boston Neighborhood")

Tuloksena on virhe, kuten näet yllä olevasta videosta. Jos minä Kutsu funktio lainatuilla sarakkeiden nimillä, saan kaavion - mutta ei haluamaasi kaaviota.

Sharon Machlis,

Tämä johtuu siitä, että perus R tarvitsee lainattujen sarakkeiden nimiä, kun taas ggplot ei.

Rlang-paketin vanhemmilla versioilla oli tähän monivaiheinen ratkaisu, kuten kerroin aikaisemmasta jaksosta "Do More With R", "Tidy Eval in R." nykyinen Rlang-versio ratkaisee ongelman uudella operaattorilla, jota kutsutaan siistiksi arviointioperaattoriksi - kaksinkertaiset kiharat. Laitat vain kiharat olkaimet funktion sisällä piilotettujen sarakkeiden nimien ympärille, ja olet valmis!

Huomaa, että tarvitset toimiakseen vähintään rlang-paketin version 0.4.0. Tuolloin, kun kirjoitin tämän artikkelin, versio 0.4.0 oli CRAN-versiossa, mutta joudut kääntämään sen lähteestä, kun tämä vaihtoehto annettiin asennuksen aikana, ainakin Macissa.

Alla olevassa koodissa ladaan rangin ja nipistän pylväspiirtotoimintoa, joten joka kerta kun viittaan sarakkeen nimiin ggplotissa, ympäröin sen kaksinkertaisilla kiharilla aaltosulkeilla - "kihara kihara" on se, miten paketin luojat viittaavat siihen.

kirjasto (rlang)

mybarplot <- funktio (mydf, myxcol, myycol, mytitle) {

ggplot2 :: ggplot (data = mydf, aes (x = järjestä uudelleen ({{myxcol}},

{{myycol}}), y = {{myycol}})) +

geom_col (color = "musta", fill = "# 0072B2") +

xlab ("") +

ylab ("") +

coord_flip () +

ggtitle (mytitle) +

teema_klassikko () +

teema (plot.title = element_text (koko = 24))

}

Nyt voin soittaa toiminnolleni

mybarplot (bos_values, RegionName, Zhvi,

"Zillow Home Value Index by Boston Neighborhood")

Aivan kuten tidyverse-funktioiden kohdalla, minun ei tarvinnut laittaa sarakkeiden nimiä lainausmerkeihin. Se luo alla olevan kaltaisen kaavion

Sharon Machlis,

Voin edelleen säätää funktioni luomaa kaaviota käyttämällä muita ggplot-komentoja. Seuraavassa koodilohkossa tallennan mukautetun toiminnon luoman kaavion muuttujaan ja teen sitten lisää muutoksia. geom_text () koodi näyttää kunkin palkin mediaaniarvon ja teema() määrittää kaavion otsikon koon.

mygraph <- mybarplot (bos_values, RegionName, Zhvi,

"Zillow Home Value Index by Boston Neighborhood")

mygraph +

geom_text (aes (tunniste = asteikot :: pilkku (Zhvi, etuliite = "$")),

hjust = 1.0, väri = "valkoinen", position = position_dodge (.9), koko = 4) +

teema (plot.title = element_text (koko = 24))

Uusi kaavio näyttäisi tältä:

Sharon Machlis,

Jos haluat lisää R-vinkkejä, siirry YouTuben Do More With R -sivulle tai Do More With R -soittolistaan.