Programiranje

Kako napisati svoje funkcije ggplot2 v R

Paketi Tidyverse, kot sta ggplot2 in dplyr, imajo sintakso funkcije, ki je ponavadi zelo priročna: imen stolpcev vam ni treba postaviti v narekovaje. Na primer:

dplyr :: filter (mtcars, mpg> 30)

Upoštevajte, da je ime stolpca mpg brez navedb.

Ta funkcija pa ni bila priročna, če želite napisati svoje lastne funkcije R z uporabo tidyverse. To je zato, ker osnovne funkcije R običajno potrebujejo navedena imena stolpcev, medtem ko funkcije tidyverse na splošno ne.

Toda ta težava ima zdaj preprosto rešitev, zahvaljujoč najnovejši različici paketa rlang. In to pomeni, da je zelo enostavno ustvariti lastne funkcije ggplot za svoje najljubše prilagojene grafe.

Naj si ogledam primer z uporabo podatkov iz Zillowa z ocenjenimi srednjimi vrednostmi doma. V spodnjo kodo naložim nekaj paketov, nastavim ime svoje podatkovne datoteke in uporabim osnovne R-je download.file funkcija za prenos datoteke CSV z Zillow. Končni koraki za pripravo podatkov: uvozite CSV v R in filtrirajte vrstice, kjer Mesto je Boston. (Paket rio uporabljam za uvoz podatkov, ker imam rad rio, lahko pa uporabite tudi kaj drugega read_csv () ali fread ().) Če sledite, vas prosimo, da filtrirate za drugo mesto.

knjižnica (dplyr)

knjižnica (ggplot2)

# Ime datoteke, v katero želim prenesti podatke:

myfilename <- "Zillow_neighborhood_home_values.csv"

# Če go.infoworld.com/ZillowData ne deluje, je celoten URL

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

download.file ("// go.infoworld.com/ZillowData", ime moje datoteke)

bos_values%

filter (Kraj == "Boston")

Nato bom ustvaril vodoravni stolpčni grafikon z nekaterimi prilagoditvami, ki jih pogosto rad uporabljam. Vrstice naročam od najvišjih do najnižjih vrednosti, jih opišem v črni barvi, obarvam v modro in spremenim privzeto sivo ozadje ggplot2.

ggplot (podatki = bos_values, aes (x = prerazporeditev (Ime regije, Zhvi), y = Zhvi)) +

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

xlab ("") +

ylab ("") +

ggtitle ("Indeks domače vrednosti Zillow po Boston Neighborhood") +

theme_classic () +

tema (plot.title = element_text (velikost = 24)) +

ord_flip ()

Kaj pa, če bi rad ustvaril svojo funkcijo za hitro generiranje takšnega grafa s katerim koli podatkovnim okvirom? Natančneje, funkcija z vhodnimi argumenti imena podatkovnega okvira, stolpca x, stolpca y in naslova grafa?

Spodaj je en poskus ustvarjanja funkcije z imenom mybarplot s prilagoditvami, ki jih želim, brez uporabe paketa rlang. Vendar ne bo delovalo.

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

ggplot (podatki = mydf, aes (x = prerazporeditev (myxcol, myycol), y = myycol)) +

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

xlab ("") +

ylab ("") +

ordin_flip () +

ggtitle (mytitle) +

theme_classic () +

tema (plot.title = element_text (velikost = 24))

}

Pokazal vam bom, kaj se zgodi, če poskušam poklicati to funkcijo z imeni stolpcev brez navedb. Na primer:

mybarplot (bos_values, RegionName, Zhvi,

"Zillow Home Value Index by Boston Neighborhood")

Rezultat je, da dobim napako, kot lahko vidite v zgornjem videoposnetku. Če jaz pokličem funkcijo z navedenimi imeni stolpcev, dobim graf - ne pa grafa, ki ga želim.

Sharon Machlis,

To je posledica izdaje baze R, ki potrebuje navedena imena stolpcev, medtem ko ggplot ne.

Starejše različice paketa rlang so imele za to večstopenjsko rešitev, kot sem opisal v prejšnji epizodi "Naredi več z R", "Tidy Eval v R." The trenutno različica rlang rešuje problem z novim operaterjem, imenovanim urejevalnik ocenjevanja - dvojne zavite oklepaje. Pravkar ste postavili kodraste oklepaje okrog imen stolpcev, ki niso navedena, znotraj svoje funkcije in končali ste!

Upoštevajte, da potrebujete vsaj različico 0.4.0 paketa rlang, da to deluje. V času, ko sem pisal ta članek, je bila različica 0.4.0 na CRAN-u, vendar ste jo morali zbrati iz vira, ko ste med namestitvijo dobili to možnost, vsaj na Macu.

V spodnji kodi naložim rlang in prilagodim svojo funkcijo ploskev stolpca, tako da vsakič, ko se sklicujem na ime stolpca v ggplot, ga obkrožim z dvojnimi zavitimi oklepaji - "kodrasti kodrasti" se na to sklicujejo ustvarjalci paketov.

knjižnica (rlang)

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

ggplot2 :: ggplot (podatki = mydf, aes (x = preurediti ({{myxcol}}),

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

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

xlab ("") +

ylab ("") +

ord_flip () +

ggtitle (mytitle) +

theme_classic () +

tema (plot.title = element_text (velikost = 24))

}

Zdaj lahko pokličem svojo funkcijo z

mybarplot (bos_values, RegionName, Zhvi,

"Zillow Home Value Index by Boston Neighborhood")

Tako kot pri funkcijah tidyverse tudi meni stolpcev ni bilo treba postaviti v narekovaje. Ustvari graf, kot je spodnji

Sharon Machlis,

Še vedno lahko prilagodim graf, ki ga je ustvarila moja funkcija, z uporabo drugih ukazov ggplot. V naslednjem bloku kode shranim graf, ki ga je ustvarila moja funkcija po meri, na spremenljivko in nato naredim še nekaj sprememb. The geom_text () koda prikaže srednjo vrednost na vsako vrstico in tema () nastavi velikost naslova grafa.

mygraph <- mybarplot (bos_values, RegionName, Zhvi,

"Zillow Home Value Index by Boston Neighborhood")

mygraph +

geom_text (aes (label = lestvice :: vejica (Zhvi, predpona = "$")),

hjust = 1,0, barva = "bela", položaj = položaj_dodge (.9), velikost = 4) +

tema (plot.title = element_text (velikost = 24))

Nov graf bi bil videti takole:

Sharon Machlis,

Če želite več nasvetov za R, pojdite na stran »Naredite več z R« na seznamu predvajanja ali »Naredite več z R« na YouTubu.

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