Cara menulis fungsi ggplot2 Anda sendiri di R

Paket Tidyverse seperti ggplot2 dan dplyr memiliki sintaks fungsi yang biasanya sangat berguna: Anda tidak perlu memasukkan nama kolom dalam tanda kutip. Sebagai contoh: 

dplyr :: filter (mtcars, mpg> 30)

Perhatikan nama kolom, mpg, tidak dikutip.

Fitur itu belum berguna, jika Anda ingin menulis fungsi R Anda sendiri menggunakan tidyverse. Itu karena fungsi basis R biasanya membutuhkan nama kolom yang dikutip sementara fungsi tidyverse umumnya tidak.

Tetapi masalah itu sekarang memiliki solusi yang sederhana, berkat versi terbaru dari paket rlang. Dan itu berarti sangat mudah membuat fungsi ggplot Anda sendiri untuk grafik kustom favorit Anda.

Izinkan saya melihat contoh, menggunakan data dari Zillow dengan perkiraan nilai rumah median. Dalam kode di bawah ini, saya memuat beberapa paket, menetapkan nama file data saya, dan menggunakan download.filefungsi basis R untuk mengunduh CSV dari Zillow. Data akhir persiapan langkah-langkah: Impor yang CSV ke R dan filter untuk baris mana Cityadalah Boston. (Saya menggunakan paket rio untuk impor data karena saya suka rio, tetapi Anda dapat menggunakan yang lain seperti read_csv()atau fread().) Jika Anda mengikuti, jangan ragu untuk memfilter kota lain.

perpustakaan (dplyr)

perpustakaan (ggplot2)

# Nama file Saya ingin mengunduh data ke:

myfilename <- "Zillow_ne Neighborhood_home_values.csv"

# Jika go.infoworld.com/ZillowData tidak berfungsi, URL lengkapnya adalah

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

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

bos_values%

filter (Kota == "Boston")

Selanjutnya, saya akan membuat diagram batang horizontal dengan beberapa penyesuaian yang sering saya gunakan. Saya memesan bilah dari nilai tertinggi ke terendah, menguraikannya dalam warna hitam, mewarnainya dengan warna biru, dan mengubah latar belakang abu-abu default ggplot2.

ggplot (data = bos_values, aes (x = menyusun ulang (RegionName, Zhvi), y = Zhvi)) +

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

xlab ("") +

ylab ("") +

ggtitle ("Indeks Nilai Rumah Zillow oleh Lingkungan Boston") +

theme_classic () +

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

coord_flip ()

Bagaimana jika saya ingin membuat fungsi sendiri untuk menghasilkan grafik seperti ini dengan cepat menggunakan data frame apa pun? Lebih khusus lagi, fungsi dengan argumen input nama bingkai data, kolom x, kolom y, dan judul grafik? 

Di bawah ini adalah salah satu upaya untuk membuat fungsi yang disebut mybarplotdengan kustomisasi yang saya inginkan, tanpa menggunakan paket rlang. Namun, itu tidak akan berhasil.

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

ggplot (data = mydf, aes (x = susun ulang (myxcol, myycol), y = myycol)) +

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

xlab ("") +

ylab ("") +

coord_flip () +

ggtitle (judul saya) +

theme_classic () +

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

}

Saya akan menunjukkan kepada Anda apa yang terjadi jika saya mencoba memanggil fungsi itu menggunakan nama kolom tanpa tanda kutip. Misalnya: 

mybarplot (bos_values, RegionName, Zhvi,

"Indeks Nilai Rumah Zillow oleh Lingkungan Boston")

Hasilnya saya mendapatkan error, seperti yang Anda lihat pada video di atas. Jika saya  memanggil fungsi dengan nama kolom yang dikutip, saya mendapatkan grafik - tetapi bukan grafik yang saya inginkan.

Sharon Machlis,

Ini karena masalah basis R membutuhkan nama kolom yang dikutip sementara ggplot tidak.

Versi lama dari paket rlang memiliki solusi multi-langkah untuk ini, seperti yang saya bahas di episode sebelumnya dari "Do More With R," "Tidy Eval in R." The sekarang versi memecahkan rlang masalah dengan operator baru yang disebut evaluasi Operator rapi - ganda kurung kurawal. Anda cukup meletakkan tanda kurung kurawal di sekitar nama kolom tanpa tanda kutip di dalam fungsi Anda, dan selesai!

Perhatikan bahwa Anda memerlukan setidaknya versi 0.4.0 paket rlang agar ini berfungsi. Pada saat saya menulis artikel ini, versi 0.4.0 menggunakan CRAN tetapi Anda perlu mengkompilasinya dari sumber ketika diberi opsi itu selama penginstalan, setidaknya di Mac.

Dalam kode di bawah ini, saya memuat rlang dan mengubah fungsi plot batang saya sehingga setiap kali saya merujuk ke nama kolom dalam ggplot, saya mengelilinginya dengan tanda kurung kurawal ganda - "keriting keriting" adalah cara pembuat paket merujuk padanya. 

perpustakaan (rlang)

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

ggplot2 :: ggplot (data = mydf, aes (x = susun ulang ({{myxcol}},

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

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

xlab ("") +

ylab ("") +

coord_flip () +

ggtitle (judul saya) +

theme_classic () +

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

}

Sekarang saya dapat memanggil fungsi saya dengan

mybarplot (bos_values, RegionName, Zhvi,

"Indeks Nilai Rumah Zillow oleh Lingkungan Boston")

Seperti halnya fungsi tidyverse, saya tidak perlu memberi nama kolom dalam tanda kutip. Ini membuat grafik seperti di bawah ini

Sharon Machlis,

Saya masih bisa mengubah grafik yang dibuat oleh fungsi saya, menggunakan perintah ggplot lainnya. Di blok kode berikutnya, saya menyimpan grafik yang dibuat oleh fungsi kustom saya ke variabel dan kemudian membuat beberapa perubahan lagi. The geom_text()kode menampilkan nilai median ke setiap bar, dan theme()set ukuran grafik headline.

mygraph <- mybarplot (bos_values, RegionName, Zhvi,

"Indeks Nilai Rumah Zillow oleh Lingkungan Boston")

mygraph +

geom_text (aes (label = scale :: koma (Zhvi, prefix = "$")),

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

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

Grafik baru akan terlihat seperti ini:

Sharon Machlis,

Untuk tips R lainnya, buka halaman "Do More With R" di atau playlist "Do More With R" di YouTube.