So schreiben Sie Ihre eigenen ggplot2-Funktionen in R.

Tidyverse-Pakete wie ggplot2 und dplyr haben eine Funktionssyntax, die normalerweise sehr praktisch ist: Sie müssen Spaltennamen nicht in Anführungszeichen setzen. Zum Beispiel: 

dplyr :: filter (mtcars, mpg> 30)

Beachten Sie, dass der Spaltenname mpg nicht in Anführungszeichen steht.

Diese Funktion war jedoch nicht praktisch, wenn Sie Ihre eigenen R-Funktionen mit der Tidyverse schreiben möchten. Dies liegt daran, dass Basis-R-Funktionen normalerweise Spaltennamen in Anführungszeichen benötigen, während Tidyverse-Funktionen dies im Allgemeinen nicht tun.

Dank der neuesten Version des rlang-Pakets hat dieses Problem jetzt eine einfache Lösung. Und das bedeutet, dass es sehr einfach ist, eigene ggplot-Funktionen für Ihre bevorzugten benutzerdefinierten Diagramme zu erstellen.

Lassen Sie mich ein Beispiel durchgehen, in dem Daten aus Zillow mit geschätzten mittleren Hauswerten verwendet werden. Im folgenden Code lade ich einige Pakete, setze meinen download.fileDatendateinamen und verwende die Funktion von base R , um eine CSV von Zillow herunterzuladen. Letzte Schritte zur Datenvorbereitung: Importieren Sie diese CSV in R und filtern Sie nach Zeilen, in denen sich diese Citybefinden Boston. (Ich verwende das Rio-Paket für den Datenimport, weil ich Rio liebe, aber Sie können auch etwas anderes wie read_csv()oder verwenden fread().) Wenn Sie mitmachen, können Sie nach einer anderen Stadt filtern.

Bibliothek (dplyr)

Bibliothek (ggplot2)

# Dateiname, zu dem ich Daten herunterladen möchte:

myfilename <- "Zillow_neighborhood_home_values.csv"

# Wenn go.infoworld.com/ZillowData nicht funktioniert, lautet die vollständige URL

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

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

bos_values%

Filter (Stadt == "Boston")

Als Nächstes erstelle ich ein horizontales Balkendiagramm mit einigen Anpassungen, die ich häufig verwende. Ich ordne die Balken vom höchsten zum niedrigsten Wert, skizziere sie in Schwarz, färbe sie in Blau und ändere den grauen Standardhintergrund von ggplot2.

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

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

xlab ("") +

ylab ("") +

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

theme_classic () +

Thema (plot.title = element_text (Größe = 24)) +

coord_flip ()

Was ist, wenn ich meine eigene Funktion erstellen möchte, um schnell ein solches Diagramm mit einem beliebigen Datenrahmen zu generieren? Insbesondere eine Funktion mit Eingabeargumenten des Datenrahmennamens, der x-Spalte, der y-Spalte und des Diagrammtitels? 

Im Folgenden finden Sie einen Versuch, eine Funktion mybarplotmit den gewünschten Anpassungen zu erstellen , ohne das Paket rlang zu verwenden. Es wird jedoch nicht funktionieren.

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

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

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

xlab ("") +

ylab ("") +

coord_flip () +

ggtitle (mytitle) +

theme_classic () +

Thema (plot.title = element_text (Größe = 24))

}}

Ich werde Ihnen zeigen, was passiert, wenn ich versuche, diese Funktion mit nicht zitierten Spaltennamen aufzurufen. Zum Beispiel: 

mybarplot (bos_values, RegionName, Zhvi,

"Zillow Home Value Index von Boston Neighborhood")

Das Ergebnis ist, dass ich eine Fehlermeldung erhalte, wie Sie im obigen Video sehen können. Wenn ich  die Funktion mit zitierten Spaltennamen aufrufe, erhalte ich ein Diagramm - aber nicht das gewünschte Diagramm.

Sharon Machlis,

Dies liegt an dem Problem, dass Basis R Spaltennamen in Anführungszeichen benötigt, während ggplot dies nicht tut.

Ältere Versionen des Rlang-Pakets hatten eine mehrstufige Lösung dafür, wie ich in einer früheren Folge von "Do More With R", "Tidy Eval in R." Die aktuelle Version von rlang löst das Problem mit einem neuen Operator, dem Operator für ordentliche Auswertung - doppelte geschweifte Klammern. Sie setzen einfach die geschweiften Klammern um die nicht zitierten Spaltennamen in Ihrer Funktion und fertig!

Beachten Sie, dass Sie mindestens Version 0.4.0 des rlang-Pakets benötigen, damit dies funktioniert. Zu der Zeit, als ich diesen Artikel schrieb, war Version 0.4.0 auf CRAN, aber Sie mussten ihn aus dem Quellcode kompilieren, wenn Sie diese Option während der Installation hatten, zumindest auf einem Mac.

Im folgenden Code lade ich rlang und optimiere meine Balkendiagrammfunktion so, dass ich sie jedes Mal, wenn ich auf einen Spaltennamen in ggplot verweise, mit doppelten geschweiften Klammern umgeben habe. 

Bibliothek (rlang)

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

ggplot2 :: ggplot (data = mydf, aes (x = reorder ({{myxcol}}),

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

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

xlab ("") +

ylab ("") +

coord_flip () +

ggtitle (mytitle) +

theme_classic () +

Thema (plot.title = element_text (Größe = 24))

}}

Jetzt kann ich meine Funktion mit aufrufen

mybarplot (bos_values, RegionName, Zhvi,

"Zillow Home Value Index von Boston Neighborhood")

Genau wie bei Tidyverse-Funktionen musste ich die Spaltennamen nicht in Anführungszeichen setzen. Es wird ein Diagramm wie das folgende erstellt

Sharon Machlis,

Ich kann das von meiner Funktion erstellte Diagramm weiterhin mit anderen ggplot-Befehlen optimieren. Im nächsten Codeblock speichere ich das von meiner benutzerdefinierten Funktion erstellte Diagramm in einer Variablen und nehme dann weitere Änderungen vor. Der geom_text()Code zeigt den Medianwert für jeden Balken an und theme()legt die Größe der Diagrammüberschriften fest.

mygraph <- mybarplot (bos_values, RegionName, Zhvi,

"Zillow Home Value Index von Boston Neighborhood")

mygraph +

geom_text (aes (label = scale :: comma (Zhvi, Präfix = "$")),

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

Thema (plot.title = element_text (Größe = 24))

Das neue Diagramm würde folgendermaßen aussehen:

Sharon Machlis,

Weitere R-Tipps finden Sie auf der Seite "Mehr mit R tun" unter oder in der Wiedergabeliste "Mehr mit R tun" auf YouTube.