כיצד לכתוב פונקציות ggplot2 משלך ב- R.

בחבילות Tidyverse כמו ggplot2 ו- dplyr יש תחביר פונקציה שלרוב די שימושי: אינך צריך לשים שמות עמודות במרכאות. לדוגמה: 

dplyr :: מסנן (mtcars, mpg> 30)

שים לב לשם העמודה, mpg, אינו מצוטט.

עם זאת, תכונה זו לא הייתה שימושית, אם ברצונך לכתוב פונקציות R משלך באמצעות ה- tidyverse. הסיבה לכך היא שפונקציות R בסיסיות בדרך כלל זקוקות לשמות עמודות מצוטטים ואילו פונקציות tidyverse בדרך כלל לא.

אך לבעיה זו יש פיתרון פשוט כעת, בזכות הגרסה האחרונה של חבילת rlang. וזה כי אמצעי זה מאוד קל ליצור פונקציות ggplot משלך עבור גרפים אישית האהוב עליך.

תן לי לעבור דוגמה תוך שימוש בנתונים של Zillow עם הערכות חציוניות משוערות. בקוד שלמטה, אני טוען כמה חבילות, מגדיר את שם קובץ הנתונים שלי ומשתמש download.fileבפונקציה של בסיס R להורדת CSV מ- Zillow. שלבי הכנת נתונים סופיים: ייבא את ה- CSV ל- R וסנן את השורות היכן Cityשהוא Boston. (אני משתמש בחבילת rio לייבוא ​​נתונים כי אני אוהב את rio, אבל אתה יכול להשתמש במשהו אחר כמו read_csv()או fread().) אם אתה עוקב אחר הדרך, אל תהסס לסנן לעיר אחרת.

ספרייה (dplyr)

ספרייה (ggplot2)

# שם קובץ שאליו אני רוצה להוריד נתונים:

myfilename <- "Zillow_neighborhood_home_values.csv"

# אם go.infoworld.com/ZillowData לא עובד, כתובת האתר המלאה היא

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

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

bos_values%

פילטר (עיר == "בוסטון")

לאחר מכן, אצור תרשים עמודות אופקי עם מספר התאמות אישיות שאני מרבה להשתמש בהן. אני מזמין את הסורגים מהערכים הגבוהים ביותר לנמוכים ביותר, מתווה אותם בשחור, צבע אותם בכחול ומשנה את הרקע האפור של ברירת המחדל של ggplot2.

ggplot (נתונים = bos_values, aes (x = סדר מחדש (RegionName, Zhvi), y = Zhvi)) +

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

xlab ("") +

ylab ("") +

ggtitle ("מדד ערך הבית של Zillow על ידי שכונת בוסטון") +

theme_classic () +

ערכת נושא (plot.title = element_text (size = 24)) +

coord_flip ()

מה אם ברצוני לבצע פונקציה משלי כדי ליצור במהירות גרף כזה עם כל מסגרת נתונים? ליתר דיוק, פונקציה עם ארגומנטים קלט של שם מסגרת הנתונים, העמודה x, העמודה y וכותרת הגרף? 

להלן ניסיון אחד ליצור פונקציה הנקראת mybarplotעם ההתאמות האישיות שאני רוצה, מבלי להשתמש בחבילת rlang. עם זאת, זה לא יעבוד.

mybarplot <- פונקציה (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 (size = 24))

}

אני אראה לך מה קורה אם אנסה לקרוא לפונקציה זו באמצעות שמות עמודות לא מצוטטים. לדוגמה: 

mybarplot (bos_values, RegionName, Zhvi,

"מדד ערך הבית של Zillow לפי שכונת בוסטון")

התוצאה היא שאני מקבל שגיאה, כפי שניתן לראות בסרטון למעלה. אם אני  קורא לפונקציה עם שמות עמודות מצוטטים, אני מקבל גרף - אבל לא את הגרף שאני רוצה.

שרון מכליס,

זה נובע מהבעיה של בסיס 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 <- פונקציה (mydf, myxcol, myycol, mytitle) {

ggplot2 :: 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 (size = 24))

}

עכשיו אני יכול להתקשר לפונקציה שלי עם

mybarplot (bos_values, RegionName, Zhvi,

"מדד ערך הבית של Zillow לפי שכונת בוסטון")

בדיוק כמו בפונקציות מסודרות, לא הייתי צריך לשים את שמות העמודות במרכאות. זה יוצר גרף כמו זה למטה

שרון מכליס,

אני עדיין יכול לשנות את הגרף שנוצר על ידי הפונקציה שלי, באמצעות פקודות ggplot אחרות. בבלוק הקוד הבא, אני שומר את הגרף שנוצר על ידי הפונקציה המותאמת אישית שלי למשתנה ואז מבצע שינויים נוספים. geom_text()הקוד יוצג הערך החציוני על כל בר, לבין theme()קבוצות גודל כותרת הגרף.

mygraph <- mybarplot (bos_values, RegionName, Zhvi,

"מדד ערך הבית של Zillow לפי שכונת בוסטון")

mygraph +

geom_text (aes (label = scales :: comma (Zhvi, prefix = "$")),

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

נושא (plot.title = element_text (size = 24))

הגרף החדש ייראה כך:

שרון מכליס,

לקבלת טיפים נוספים בנושא R, היכנס לדף "עשה יותר עם R" בכתובת או לפלייליסט "עשה יותר עם R" ב- YouTube.