Programovanie

Ako napísať svoje vlastné funkcie ggplot2 v R

Balíky Tidyverse ako ggplot2 a dplyr majú syntax funkcií, ktorá je zvyčajne veľmi užitočná: Nemusíte dávať názvy stĺpcov do úvodzoviek. Napríklad:

dplyr :: filter (mtcars, mpg> 30)

Názov stĺpca, mpg, je bez úvodzoviek.

Táto funkcia však nebola užitočná, ak chcete pomocou tidyverse napísať svoje vlastné funkcie R. Je to preto, že základné funkcie R zvyčajne potrebujú citované názvy stĺpcov, zatiaľ čo funkcie tidyverse všeobecne nie.

Tento problém má ale teraz jednoduché riešenie, a to vďaka najnovšej verzii balíka rlang. A že znamená, že je veľmi ľahké vytvoriť si vlastné funkcie ggplot pre svoje obľúbené prispôsobené grafy.

Poviem to na príklade pomocou údajov od spoločnosti Zillow s odhadovanými strednými domácimi hodnotami. V nižšie uvedenom kóde načítam niekoľko balíkov, nastavím názov svojho dátového súboru a použijem base R. stiahnuť súbor funkcia na stiahnutie CSV zo Zillow. Posledné kroky prípravy údajov: Importujte tento súbor CSV do jazyka R a vyfiltrujte riadky, kde Mesto je Boston. (Používam balík rio na import údajov, pretože mám rád rio, ale môžete použiť niečo podobné read_csv () alebo fread ().) Ak ideš ďalej, pokojne si vyfiltruj ďalšie mesto.

knižnica (dplyr)

knižnica (ggplot2)

# Názov súboru, do ktorého chcem stiahnuť údaje:

myfilename <- "Zillow_ne Neighborhood_home_values.csv"

# Ak go.infoworld.com/ZillowData nefunguje, úplná adresa URL je

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

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

bos_values%

filter (Mesto == "Boston")

Ďalej vytvorím vodorovný stĺpcový graf s niekoľkými prispôsobeniami, ktoré často používam. Objednávam pruhy od najvyššej po najnižšiu hodnotu, načrtávam ich čiernou farbou, vyfarbujem ich modrou farbou a mením predvolené šedé pozadie ggplot2.

ggplot (data = bos_values, aes (x = zmeniť poradie (RegionName, Zhvi), y = Zhvi)) +

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

xlab ("") +

ylab ("") +

ggtitle ("Zillow Home Value Index od spoločnosti Boston Neighborhood") +

theme_classic () +

téma (plot.title = element_text (veľkosť = 24)) +

coord_flip ()

Čo ak by som chcel vytvoriť svoju vlastnú funkciu na rýchle generovanie takéhoto grafu s akýmkoľvek dátovým rámcom? Presnejšie povedané, funkcia so vstupnými argumentmi názvu dátového rámca, stĺpca x, stĺpca y a názvu grafu?

Nižšie je uvedený jeden pokus o vytvorenie funkcie s názvom mybarplot s prispôsobeniami, ktoré chcem, bez použitia balíka rlang. Nebude to však fungovať.

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

ggplot (data = mydf, aes (x = zmena poradia (myxcol, myycol), y = myycol)) +

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

xlab ("") +

ylab ("") +

coord_flip () +

ggtitle (mytitle) +

theme_classic () +

téma (plot.title = element_text (veľkosť = 24))

}

Ukážem vám, čo sa stane, ak sa pokúsim túto funkciu zavolať pomocou nekótovaných názvov stĺpcov. Napríklad:

mybarplot (bos_values, RegionName, Zhvi,

„Index domácej hodnoty Zillow podľa susedstva Bostonu“)

Výsledkom je, že sa mi zobrazuje chyba, ako vidíte na videu vyššie. Ak ja zavolajte funkciu s uvedenými názvami stĺpcov, dostanem graf - ale nie graf, ktorý chcem.

Sharon Machlis,

Je to z dôvodu problému, že báza R potrebuje citované názvy stĺpcov, zatiaľ čo ggplot nie.

Staršie verzie balíka rlang mali viacstupňové riešenie, pretože som sa o nich zmienil v predchádzajúcej epizóde „Do More With R“, „Tidy Eval in R.“ The prúd verzia rlang rieši problém s novým operátorom nazývaným operátor uprataného vyhodnotenia - dvojité zložené zátvorky. Len vložíte zložené zátvorky okolo názvu stĺpca bez úvodzoviek do svojej funkcie a máte hotovo!

Upozorňujeme, že aby to fungovalo, potrebujete minimálne verziu 0.4.0 balíka rlang. V čase, keď som písal tento článok, bola verzia 0.4.0 na serveri CRAN, ale bolo potrebné ho skompilovať zo zdroja, keď ste túto možnosť dostali počas inštalácie, aspoň na počítači Mac.

V nižšie uvedenom kóde načítam rlang a vyladím svoju funkciu barového vykreslenia, takže zakaždým, keď v ggplot odkazujem na názov stĺpca, obklopím ho dvojitými zloženými zátvorkami - „curly curly“ je to, na čo sa odvolávajú tvorcovia balíkov.

knižnica (rlang)

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

ggplot2 :: ggplot (data = mydf, aes (x = zmeniť poradie ({{myxcol}}),

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

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

xlab ("") +

ylab ("") +

coord_flip () +

ggtitle (mytitle) +

theme_classic () +

téma (plot.title = element_text (veľkosť = 24))

}

Teraz môžem zavolať svoju funkciu pomocou

mybarplot (bos_values, RegionName, Zhvi,

„Index domácej hodnoty Zillow podľa susedstva Bostonu“)

Rovnako ako pri funkciách tidyverse, ani ja som nemusel dávať názvy stĺpcov do úvodzoviek. Vytvorí graf, ako je tento nižšie

Sharon Machlis,

Stále môžem doladiť graf vytvorený mojou funkciou pomocou ďalších príkazov ggplot. V ďalšom bloku kódu uložím graf vytvorený mojou vlastnou funkciou do premennej a potom urobím ďalšie zmeny. The geom_text () kód zobrazí strednú hodnotu na každom stĺpci a téma () nastavuje veľkosť nadpisu grafu.

mygraph <- mybarplot (bos_values, RegionName, Zhvi,

„Index domácej hodnoty Zillow podľa susedstva Bostonu“)

mygraph +

geom_text (aes (label = scales :: comma (Zhvi, prefix = "$")),

hjust = 1,0, color = "white", position = position_dodge (.9), size = 4) +

téma (plot.title = element_text (veľkosť = 24))

Nový graf by vyzeral takto:

Sharon Machlis,

Ďalšie tipy R nájdete na stránke „Do More With R“ na alebo na zozname videí „Do More With R“ na YouTube.

$config[zx-auto] not found$config[zx-overlay] not found