Προγραμματισμός

Πώς να γράψετε τις δικές σας συναρτήσεις ggplot2 στο R

Τα πακέτα Tidyverse όπως το ggplot2 και το dplyr έχουν μια σύνταξη λειτουργίας που είναι συνήθως πολύ βολική: Δεν χρειάζεται να βάλετε ονόματα στηλών σε εισαγωγικά. Για παράδειγμα:

dplyr :: φίλτρο (mtcars, mpg> 30)

Σημειώστε ότι το όνομα της στήλης, mpg, είναι χωρίς εισαγωγικά.

Αυτό το χαρακτηριστικό δεν ήταν βολικό, αν θέλετε να γράψετε τις δικές σας λειτουργίες R χρησιμοποιώντας το tidyverse. Αυτό συμβαίνει επειδή οι βασικές συναρτήσεις R συνήθως χρειάζονται αναφερόμενες ονομασίες στηλών, ενώ γενικά δεν λειτουργούν tidyverse.

Αλλά αυτό το πρόβλημα έχει μια απλή λύση τώρα, χάρη στην τελευταία έκδοση του πακέτου rlang. Και ότι σημαίνει ότι είναι πολύ εύκολο να δημιουργήσετε τις δικές σας λειτουργίες ggplot για τα αγαπημένα σας προσαρμοσμένα γραφήματα.

Επιτρέψτε μου να αναφερθώ σε ένα παράδειγμα, χρησιμοποιώντας δεδομένα από το Zillow με εκτιμώμενες μέσες τιμές στο σπίτι. Στον παρακάτω κώδικα, φορτώνω μερικά πακέτα, ορίζω το όνομα του αρχείου δεδομένων μου και χρησιμοποιώ τη βάση R λήψη. αρχείο λειτουργία για λήψη ενός CSV από το Zillow. Βήματα προετοιμασίας τελικών δεδομένων: Εισαγάγετε αυτό το CSV στο R και φιλτράρετε για σειρές όπου Πόλη είναι Βοστόνη. (Χρησιμοποιώ το πακέτο rio για εισαγωγή δεδομένων επειδή μου αρέσει το rio, αλλά μπορείτε να χρησιμοποιήσετε κάτι άλλο σαν read_csv () ή δίχτυ ().) Εάν ακολουθείτε, μη διστάσετε να φιλτράρετε για άλλη πόλη.

βιβλιοθήκη (dplyr)

βιβλιοθήκη (ggplot2)

# Όνομα αρχείου Θέλω να κατεβάσω δεδομένα σε:

myfilename <- "Zillow_neighborhood_home_values.csv"

# Εάν το go.infoworld.com/ZillowData δεν λειτουργεί, το πλήρες URL είναι

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

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

bos_values%

φίλτρο (Πόλη == "Βοστώνη")

Στη συνέχεια, θα δημιουργήσω ένα οριζόντιο γράφημα ράβδων με ορισμένες προσαρμογές που συχνά μου αρέσει να χρησιμοποιώ. Παραγγέλνω τις μπάρες από τις υψηλότερες έως τις χαμηλότερες τιμές, τις σκιαγραφώ με μαύρο χρώμα, τις χρωματίζω με μπλε και αλλάζω το προεπιλεγμένο γκρι φόντο του ggplot2.

ggplot (data = bos_values, aes (x = αναδιάταξη (RegionName, Zhvi), y = Zhvi)) +

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

xlab ("") +

ylab ("") +

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

theme_classic () +

θέμα (plot.title = element_text (μέγεθος = 24)) +

coord_flip ()

Τι γίνεται αν θέλω να κάνω τη δική μου λειτουργία για να δημιουργήσω γρήγορα ένα γράφημα όπως αυτό με οποιοδήποτε πλαίσιο δεδομένων; Πιο συγκεκριμένα, μια συνάρτηση με ορίσματα εισαγωγής του ονόματος πλαισίου δεδομένων, της στήλης x, της στήλης y και του τίτλου γραφήματος;

Ακολουθεί μια απόπειρα δημιουργίας μιας λειτουργίας που ονομάζεται mybarplot με τις προσαρμογές που θέλω, χωρίς τη χρήση του πακέτου rlang. Ωστόσο, δεν θα λειτουργήσει.

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

ggplot (δεδομένα = mydf, aes (x = αναδιάταξη (myxcol, myycol), y = myycol)) +

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

xlab ("") +

ylab ("") +

coord_flip () +

ggtitle (mytitle) +

theme_classic () +

θέμα (plot.title = element_text (μέγεθος = 24))

}

Θα σας δείξω τι θα συμβεί αν προσπαθήσω να καλέσω αυτήν τη συνάρτηση χρησιμοποιώντας μη εισαγωγικά ονόματα στηλών. Για παράδειγμα:

mybarplot (bos_values, RegionName, Zhvi,

"Zillow Home Value Index by Boston Neighborhood")

Το αποτέλεσμα είναι ότι έχω ένα σφάλμα, όπως μπορείτε να δείτε στο παραπάνω βίντεο. Αν εγώ καλέστε τη συνάρτηση με αναφερόμενα ονόματα στηλών, παίρνω ένα γράφημα - αλλά όχι το γράφημα που θέλω.

Sharon Machlis,

Αυτό οφείλεται στο ζήτημα της βάσης R που χρειάζεται αναφερόμενα ονόματα στηλών, ενώ το ggplot δεν το κάνει.

Οι παλαιότερες εκδόσεις του πακέτου rlang είχαν μια λύση πολλαπλών βημάτων για αυτό, όπως κάλυψα σε ένα προηγούμενο επεισόδιο του "Do More With R", "Tidy Eval in R." ο ρεύμα Η έκδοση του rlang λύνει το πρόβλημα με έναν νέο χειριστή που ονομάζεται τελεστής αξιολόγησης - διπλά σγουρά τιράντες. Βάζετε απλώς τα σγουρά τιράντες γύρω από τα μη εισαγωγικά ονόματα στηλών στη λειτουργία σας και τελειώσατε!

Σημειώστε ότι χρειάζεστε τουλάχιστον την έκδοση 0.4.0 του πακέτου rlang για να λειτουργήσει αυτό. Τη στιγμή που έγραψα αυτό το άρθρο, η έκδοση 0.4.0 βρισκόταν στο CRAN, αλλά χρειάστηκε να το μεταγλωττίσετε από την πηγή όταν του δοθεί αυτή η επιλογή κατά την εγκατάσταση, τουλάχιστον σε Mac.

Στον παρακάτω κώδικα, φορτώνω rlang και τροποποιώ τη λειτουργία της γραμμής μου, οπότε κάθε φορά που αναφέρομαι σε ένα όνομα στήλης στο ggplot, το περιβάλλω με διπλά σγουρά στηρίγματα - το "σγουρό σγουρό" είναι ο τρόπος με τον οποίο οι δημιουργοί πακέτων αναφέρονται σε αυτό.

βιβλιοθήκη (rlang)

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

ggplot2 :: ggplot (data = mydf, aes (x = αναδιάταξη ({{myxcol}},

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

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

xlab ("") +

ylab ("") +

coord_flip () +

ggtitle (mytitle) +

theme_classic () +

θέμα (plot.title = element_text (μέγεθος = 24))

}

Τώρα μπορώ να καλέσω τη λειτουργία μου με

mybarplot (bos_values, RegionName, Zhvi,

"Zillow Home Value Index by Boston Neighborhood")

Όπως και με τις tidyverse συναρτήσεις, δεν χρειάστηκε να βάλω τα ονόματα των στηλών σε εισαγωγικά. Δημιουργεί ένα γράφημα όπως το παρακάτω

Sharon Machlis,

Μπορώ ακόμα να τροποποιήσω το γράφημα που δημιουργήθηκε από τη λειτουργία μου, χρησιμοποιώντας άλλες εντολές ggplot. Στο επόμενο μπλοκ κώδικα, αποθηκεύω το γράφημα που δημιουργήθηκε από την προσαρμοσμένη λειτουργία μου σε μια μεταβλητή και έπειτα κάνω μερικές ακόμη αλλαγές. ο geom_text () Ο κωδικός εμφανίζει τη μέση τιμή σε κάθε γραμμή και θέμα() ορίζει το μέγεθος της επικεφαλίδας του γραφήματος.

mygraph <- mybarplot (bos_values, RegionName, Zhvi,

"Zillow Home Value Index by Boston Neighborhood")

mygraph +

geom_text (aes (label = scales :: κόμμα (Zhvi, πρόθεμα = "$")),

hjust = 1.0, χρώμα = "λευκό", θέση = position_dodge (.9), size = 4) +

θέμα (plot.title = element_text (μέγεθος = 24))

Το νέο γράφημα θα μοιάζει με αυτό:

Sharon Machlis,

Για περισσότερες συμβουλές R, μεταβείτε στη σελίδα "Do More With R" ή στη λίστα αναπαραγωγής "Do More With R" στο YouTube.