Programmēšana

Kā rakstīt savas ggplot2 funkcijas R

Tidyverse paketēm, piemēram, ggplot2 un dplyr, ir funkciju sintakse, kas parasti ir diezgan ērta: kolonnu nosaukumi nav jāliek pēdiņās. Piemēram:

dplyr :: filtrs (mtcars, mpg> 30)

Ņemiet vērā, ka kolonnas nosaukums mpg nav citēts.

Tomēr šī funkcija nav bijusi ērta, ja vēlaties rakstīt savas R funkcijas, izmantojot tidiverse. Tas ir tāpēc, ka bāzes R funkcijām parasti ir nepieciešami citēti kolonnu nosaukumi, savukārt kārtotajām funkcijām parasti nav.

Bet šai problēmai tagad ir vienkāršs risinājums, pateicoties jaunākajai pakotnes rlang versijai. Un to nozīmē, ka ir ļoti viegli izveidot savas ggplot funkcijas iecienītākajiem pielāgotajiem grafikiem.

Ļaujiet man apskatīt piemēru, izmantojot datus no Zillow ar aprēķinātajām vidējām mājas vērtībām. Zemāk esošajā kodā es ielādēju pāris paketes, iestatīju savu datu faila nosaukumu un izmantoju bāzes R download.file funkciju, lai lejupielādētu CSV no Zillow. Pēdējo datu sagatavošanas darbības: importējiet CSV failā R un filtrējiet rindas, kur Pilsēta ir Bostona. (Datu importēšanai izmantoju paketi rio, jo man patīk rio, bet jūs varat izmantot kaut ko citu, piemēram lasīt_csv () vai maize ().) Ja sekojat līdzi, nekautrējieties filtrēt citu pilsētu.

bibliotēka (dplyr)

bibliotēka (ggplot2)

# Faila nosaukums, kurā vēlos lejupielādēt datus:

myfilename <- "Zillow_neighborhood_home_values.csv"

# Ja go.infoworld.com/ZillowData nedarbojas, pilns URL ir

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

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

bos_values%

filtrs (pilsēta == "Bostona")

Pēc tam es izveidošu horizontālu joslu diagrammu ar dažiem pielāgojumiem, kurus man bieži patīk izmantot. Es pasūtu joslas no augstākajām līdz zemākajām vērtībām, iezīmējot tās melnā krāsā, iekrāsojot tās zilā krāsā un mainot noklusējuma pelēko fonu ggplot2.

ggplot (dati = bos_values, aes (x = pārkārtot (RegionName, Zhvi), y = Zhvi)) +

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

xlab ("") +

ylab ("") +

ggtitle ("Bostonas apkaimes Zillow Home Value Index") +

theme_classic () +

motīvs (plot.title = element_text (size = 24)) +

coord_flip ()

Ko darīt, ja es vēlētos izveidot savu funkciju, lai ātri ģenerētu šādu diagrammu ar jebkuru datu rāmi? Precīzāk, funkcija ar datu rāmja nosaukuma, x kolonnas, y kolonnas un diagrammas nosaukuma ievades argumentiem?

Zemāk ir viens mēģinājums izveidot funkciju ar nosaukumu mybarplot ar vēlamajiem pielāgojumiem, neizmantojot paketi rlang. Tomēr tas nedarbosies.

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

ggplot (dati = mydf, aes (x = pārkārtot (myxcol, myycol), y = myycol)) +

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

xlab ("") +

ylab ("") +

coord_flip () +

ggtitle (mytitle) +

theme_classic () +

motīvs (plot.title = element_text (size = 24))

}

Es jums parādīšu, kas notiek, ja mēģinu izsaukt šo funkciju, izmantojot nekotētus sleju nosaukumus. Piemēram:

mybarplot (bos_values, RegionName, Zhvi,

"Zillow Bostonas apkaimes mājas vērtības indekss")

Rezultātā tiek parādīta kļūda, kā redzat iepriekš redzamajā videoklipā. Ja es izsauciet funkciju ar citētiem kolonnu nosaukumiem, es saņemu diagrammu - bet ne vēlamo diagrammu.

Sharon Machlis,

Tas ir saistīts ar jautājumu par bāzes R nepieciešamību citēt kolonnu nosaukumus, bet ggplot nav.

Vecākām paketes rlang versijām tam bija daudzpakāpju risinājums, kā es to aprakstīju agrākā epizodē “Do More With R”, “Tidy Eval in R.” The pašreizējais rlang versija atrisina problēmu ar jaunu operatoru, ko sauc par kārtīgu novērtēšanas operatoru - dubultās cirtainās lencītes. Jūs vienkārši ievietojat cirtainās lencītes ap nekotētiem kolonnu nosaukumiem savas funkcijas iekšpusē, un viss ir pabeigts!

Ņemiet vērā, ka, lai tas darbotos, nepieciešama vismaz pakotnes rlang versija 0.4.0. Laikā, kad es rakstīju šo rakstu, versija 0.4.0 bija CRAN, taču jums tas bija jāapkopo no avota, ja instalēšanas laikā deva šo opciju, vismaz Mac datorā.

Zemāk esošajā kodā es ielādēju diapazonu un pielieku savu joslas diagrammas funkciju, tāpēc katru reizi, kad atsaucos uz kolonnas nosaukumu ggplot, es to ieskauj ar dubultām cirtainām lencēm - “cirtaini cirtaini” ir tas, kā paketes veidotāji atsaucas uz to.

bibliotēka (rlang)

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

ggplot2 :: ggplot (dati = mydf, aes (x = pārkārtot ({{myxcol}},

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

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

xlab ("") +

ylab ("") +

coord_flip () +

ggtitle (mytitle) +

theme_classic () +

motīvs (plot.title = element_text (size = 24))

}

Tagad es varu izsaukt savu funkciju ar

mybarplot (bos_values, RegionName, Zhvi,

"Zillow Bostonas apkaimes mājas vērtības indekss")

Tāpat kā ar kārtotām funkcijām, kolonnu nosaukumus nevajadzēja likt pēdiņās. Tas izveido tādu diagrammu kā zemāk

Sharon Machlis,

Es joprojām varu pielāgot savas funkcijas izveidoto diagrammu, izmantojot citas komandas ggplot. Nākamajā koda blokā es savā pielāgotās funkcijas izveidoto diagrammu saglabāju mainīgajā un pēc tam veicu vēl dažas izmaiņas. The geom_text () kods parāda vidējo vērtību katrā joslā un tēma () iestata diagrammas virsraksta lielumu.

mygraph <- mybarplot (bos_values, RegionName, Zhvi,

"Zillow Bostonas apkaimes mājas vērtības indekss")

mygraph +

geom_text (aes (etiķete = svari :: komats (Zhvi, prefikss = "$")),

hjust = 1,0, krāsa = "balta", pozīcija = position_dodge (.9), izmērs = 4) +

motīvs (plot.title = element_text (size = 24))

Jaunais grafiks izskatīsies šādi:

Sharon Machlis,

Lai iegūtu vairāk R padomu, dodieties uz YouTube lapu “Do more With R” vai atskaņošanas sarakstu “Do More With R” vietnē.

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