גרפיקהב- R בסיסי מבואלתכנותמדעיוסטטיסטי R גרפיקה ב- ggplot חלק 12 ראינו והשתמשנו ב- plot hist boxplot barplot היום גישהאחרתלגמרי מבואלתכנות מדעיוסטטיסטי R חלק 12 סמסטר 2 מבואלתכנות מדעיוסטטיסטי R חלק 12 סמסטר 1 ggplot ggplot Leland נשתמש בחבילה ggplot2 נוצרה ע"יWickham Hadley ב- 2005 מתבססתעל "דקדוק" לגרפיקהשהמציא Wilkinson ggplot = Grammar of Graphics Plot אחת החבילות הפופולריות ביותר של R מבוא לתכנות מדעי וסטטיסטי R 12 חלק מבואלתכנות מדעיוסטטיסטי R חלק 12 סמסטרב' תש"ף, 3 2019/20 סמסטר 4
ggplot אלמנטים של גרפיקה איכות התוצאה ggplot base R data הנתוניםשרוציםלהציגבתרשים aes המיפויהאסתטי (aesthetic) שלהמשתנים בנתוניםלתכונותאסתטיות מיקוםאופקי (x) מיקוםאנכי (y) צבע גודל זמן סמסטר 12 חלק R 5 מבוא לתכנות מדעי וסטטיסטי R סמסטר 12 חלק 6 אלמנטים של גרפיקה אלמנטים של גרפיקה geoms האובייקטיםהגאומטרייםשמייצגיםאת הנתוניםבתרשים נקודות (points) קווים (lines) עמודות (bars) מצולעים (polygons) stats טרנספורמציותסטטיסטיותעלהנתונים חלוקה לקבוצות וספירת תצפיות בשביל היסטוגרמה סיכום מגמה באמצעות הוספת קו רגרסיה מוסיפים לתרשים את האלמנטים השונים, שכבה אחר שכבה מבוא לתכנות מדעי וסטטיסטי R 12 חלק מבואלתכנות מדעיוסטטיסטי R חלק 12 סמסטרב' תש"ף, 7 2019/20 סמסטר 8
דיאגרמת פיזור הנתונים > library(ggplot2) > gdat <- read.table(file="countries_data.txt", header=t, sep="\t") > head(gdat) country year pop gdppercap 1 Afghanistan 1952 8425333 Asia 28.1 779.4453 2 Afghanistan 1957 92934 Asia 30.332 820.8530 3 Afghanistan 1962 10267083 Asia 31.997 853.1007 4 Afghanistan 1967 11537966 Asia 34.020 836.1971 5 Afghanistan 1972 130794 Asia 36.088 739.9811 6 Afghanistan 1977 148372 Asia 38.438 786.1134 > p <- ggplot(gdat, aes(x = gdppercap, y = )) > p + geom_point() 0 30000 000 90000 gdppercap 12 R מבואלתכנות מדעיוסטטיסטי R חלק 12 סמסטרב' תש"ף, 9 2019/20 10 טרנספורמציות שמות לצירים > p + geom_point() + labs(x="", y="") טרנספורמציהלוגריתמית "מלוכלכת" > ggplot(gdat, aes(x = log10(gdppercap), y = )) + geom_point() 0 30000 000 90000 3 4 5 log10(gdppercap) 12 R 11 12 R 12
טרנספורמציות טרנספורמציות > p + geom_point() + scale_x_log10() עדיף ככה נקבע את השינויים האחרונים > p <- p + scale_x_log10() + labs(x="", y="") כךמקובללעבוד: להוסיףבשלביםאתהפקודותשרוצים "לשמור" gdppercap 12 R 13 12 R 14 חלוקה לקבוצות חלוקה לקבוצות > p + geom_point(aes(color = )) > p + geom_point(aes(color = )) + scale_color_manual(values = c("red", "blue", "green", "black", "yellow")) Africa Americas Asia Europe Oceania Africa Americas Asia Europe Oceania 12 R 15 12 R 16
פתרונות ל- Overplotting חלוקה לקבוצות > vals <- c("#ff0000", "#00FF00", "#0000FF", "#FF90C0", "#CC60") > p + geom_point(aes(color = )) + scale_color_manual(values = vals) > p + geom_point(alpha = 0.3, size = 2) Africa Americas Asia Europe Oceania 12 R 17 12 R 18 החלקה פתרונות ל- Overplotting > p + geom_bin2d() > p + geom_point() + geom_smooth() 12 R מבואלתכנות מדעיוסטטיסטי R חלק 12 סמסטרב' תש"ף, 19 2019/20 מבוא לתכנות מדעי וסטטיסטי 20
קו רגרסיה החלקה > p + geom_point() + geom_smooth(lwd = 1.5, se = FALSE) > p + geom_point() + geom_smooth(lwd = 1.5, se = FALSE, method = "lm") 12 R 21 12 R 22 החלקה Faceting > p + aes(color = ) + geom_point() + geom_smooth(lwd = 1.5, se = FALSE) > p + geom_point(alpha = 0.3) + facet_wrap(~ ) Africa Americas Asia Europe Oceania 12 R 23 12 R 24
Faceting תרגיל > p + geom_point(alpha = 0.3) + facet_wrap(~ ) + geom_smooth(se = FALSE) שרטטו את תוחלת החיים כפונקציה של השנה לכל המדינות דיאגרמת פיזור רגילה faceting לפייבשת עםהחלקהועםקורגרסיהלינארית בלי faceting עם החלקה עם faceting עם קווים שמחברים בין הנקודות של כל מדינה לאורך השנים 12 R מבואלתכנות מדעיוסטטיסטי R חלק 12 סמסטרב' תש"ף, 25 2019/20 26 Subsetting Subsetting עובדתהיטביחדעםdplyr ggplot > library(dplyr) > gdat %>% filter(country == "Italy") %>% ggplot(aes(x=year, y=)) + geom_line() + geom_point() > jcountries <- c("canada", "Rwanda", "Cambodia") > gdat %>% filter(country %in% jcountries) %>% ggplot(aes(x=year, y=, color = country)) + geom_line() + geom_point() 75 70 country Cambodia Canada Rwanda 1950 19 1970 19 1990 2000 year 1950 19 1970 19 1990 2000 year 12 R 27 12 R 28
הפונקציה היסטוגרמה reorder > ggplot(subset(gdat, == "Europe"), aes()) + geom_histogram() count 50 30 20 10 0 50 70 > diets name diet change 1 Jill A 1.3 2 Jack C -3.9 3 Tiffany B -6.1 4 Sarah B 1.2 5 Stan A -0.8 6 Terry B -2.0 7 Jeff C -4.4 8 Dave C -2.8 > diets$diet [1] A C B B A B C C Levels: A B C 12 R 29 12 R 30 הפונקציה reorder Stripplots > reorder(diets$diet, diets$change, mean) [1] A C B B A B C C attr(,"scores") A B C 0.25-2.30-3.70 Levels: C B A > reorder(diets$diet, diets$change, min) [1] A C B B A B C C attr(,"scores") A B C -0.8-6.1-4.4 Levels: B C A לא כל כך טוב: > ggplot(gdat, aes(x =, y = )) + geom_point() 12 R מבואלתכנות מדעיוסטטיסטי R חלק 12 סמסטרב' תש"ף, 31 2019/20 מבוא לתכנות מדעי וסטטיסטי 32
Stripplots Stripplots עדיף ככה: > ggplot(gdat, aes(x =, y = )) + geom_jitter() > ggplot(gdat, aes(x =, y = )) + geom_jitter(position = position_jitter(width=0.4, height=0), alpha=0.25) 12 R מבואלתכנות מדעיוסטטיסטי R חלק 12 סמסטרב' תש"ף, 33 2019/20 34 Stripplots Stripplots > ggplot(gdat, aes(x =, y = )) + geom_jitter(position = position_jitter(width=0.4), alpha=0.25) + stat_summary(fun.y=median, color="red", geom="point", size=5) תרגיל: איךמשניםאתהתרשיםהקודםכךשסדר ה- stripplots יהיהלפיחציוןעולה? 12 R מבואלתכנות מדעיוסטטיסטי R חלק 12 סמסטרב' תש"ף, 35 2019/20 מבוא לתכנות מדעי וסטטיסטי 36
Boxplots Boxplots > ggplot(gdat, aes(x =, y = )) + geom_boxplot() > ggplot(gdat, aes(x =, y = )) + geom_boxplot(outlier.colour = "hotpink") + geom_jitter(position = position_jitter(width=0.4, height=0), alpha=0.25) Africa Americas Asia Europe Oceania 12 R 37 12 R 38 Bar charts Bar charts > ggplot(gdat, aes(x = )) + geom_bar() > ggplot(gdat, aes(x = reorder(,, length))) + geom_bar() + labs(x = "") 0 0 0 count 200 count 0 200 0 Africa Americas Asia Europe Oceania 0 Oceania Americas Europe Asia Africa 12 R 39 12 R
Bar charts Bar charts > ggplot(gdat, aes(x = )) + geom_bar(width=0.2) + coord_flip() Oceania Europe Asia Americas Africa 0 200 0 0 count ל- geom_bar ישארגומנט,stat שברירתהמחדלשלו היא "count > cars לכן הגובה של כל עמודה הוא מספר המדינות בכל יבשת maker sold 1 Toyota 512 2 Audi 126 3 Honda 313 4 Fiat 88 איך משרטטים עמודות בגבהים נתונים? נניח שנתונה מסגרת הנתונים הבאה 12 R 41 12 R 42 Bar charts הוספת כותרת > ggplot(cars, aes(x = maker, y = sold)) + geom_bar(stat = "identity") 500 > p <- ggplot(gdat, aes(x = gdppercap, y = )) + scale_x_log10() + aes(color = ) + geom_point() + labs(x="", y="life Expectancy") > p + ggtitle("life expectancy vs. GDP by ") Life expectancy vs. GDP by 0 sold 300 200 100 Africa Americas Asia Europe Oceania 0 Audi Fiat Honda Toyota maker 12 R 43 12 R 44
Themes Themes כלהגרפיםשראינועדעכשיוהיובאותו "סגנון" ויזואלי ישמבחרשלסגנונותאחריםבספריה ggthemes נטעןאתהספריה > library(ggthemes) > p + theme_economist() + ggtitle("life Exp. vs GDP, theme = economist") Life Exp. vs GDP, theme = economist Africa Americas Asia Europe Oceania gdppercap 12 R מבואלתכנות מדעיוסטטיסטי R חלק 12 סמסטרב' תש"ף, 45 2019/20 46 Themes > p + theme_wsj() + ggtitle("theme = WSJ") Theme = WSJ Africa Americas Asia Europe Oceania 12 R 47