slides-05 - graphicsyuval/teaching... · 2015/16 , ו"עשת ' ברטסמס • 5 קלח • R - ב...
Transcript of slides-05 - graphicsyuval/teaching... · 2015/16 , ו"עשת ' ברטסמס • 5 קלח • R - ב...
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב 1
5חלק • R-תכנות מתקדם ב
ggplot-גרפיקה ב
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב 2
בסיסי R-גרפיקה ב
-ראינו והשתמשנו ב••plot•hist•boxplot•barplot
…
גישה אחרת לגמרי–היום •
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
ggplot
3 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
ggplot
ggplot2נשתמש בחבילה •
2005-ב Hadley Wickhamי "נוצרה ע•
Lelandלגרפיקה שהמציא " דקדוק"מתבססת על •Wilkinson
•ggplot = Grammar of Graphics Plot
Rאחת החבילות הפופולריות ביותר של •
4
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
ggplot
5
איכות
התוצאה
זמן
base R
ggplot
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
אלמנטים של גרפיקה
•data–הנתונים שרוצים להציג בתרשים
•aes– המיפוי האסתטי)aesthetic ( של המשתנים
בנתונים לתכונות אסתטיות
)x(מיקום אופקי •
)y(מיקום אנכי •
צבע•
גודל•
6
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
אלמנטים של גרפיקה
•geoms– האובייקטים הגאומטריים שמייצגים את
הנתונים בתרשים
)points(נקודות •
)lines(קווים •
)bars(עמודות •
)polygons(מצולעים •
7 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
אלמנטים של גרפיקה
•stats–טרנספורמציות סטטיסטיות על הנתונים
היסטוגרמהחלוקה לקבוצות וספירת תצפיות בשביל •
סיכום מגמה באמצעות הוספת קו רגרסיה•
שכבה אחר , מוסיפים לתרשים את האלמנטים השונים•
שכבה
8
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
הנתונים
> library(ggplot2)
> gDat <- read.table(file="countries_data.txt", header=T, sep="\t")
> head(gDat)
country year pop continent lifeExp gdpPercap
1 Afghanistan 1952 8425333 Asia 28.801 779.4453
2 Afghanistan 1957 9240934 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 13079460 Asia 36.088 739.9811
6 Afghanistan 1977 14880372 Asia 38.438 786.1134
9 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
דיאגרמת פיזור
> p <- ggplot(gDat, aes(x = gdpPercap, y = lifeExp))
> p + geom_point()
10
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
שמות לצירים
> p + geom_point() + labs(x="GDP Per Capita", y="Life Expectancy")
11 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
טרנספורמציות
"מלוכלכת"טרנספורמציה לוגריתמית •> ggplot(gDat, aes(x = log10(gdpPercap),
y = lifeExp)) + geom_point()
12
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
טרנספורמציות
עדיף ככה•> p + geom_point() + scale_x_log10()
13 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
טרנספורמציות
נקבע את השינויים האחרונים•> p <- p + scale_x_log10() +
labs(x="GDP Per Capita", y="Life Expectancy")
להוסיף בשלבים את הפקודות שרוצים : כך מקובל לעבוד•
"לשמור"
14
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
חלוקה לקבוצות
> p + geom_point(aes(color = continent))
15 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
חלוקה לקבוצות
> p + geom_point(aes(color = continent)) + scale_color_manual(values = c("red", "blue", "green", "black", "yellow"))
16
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
חלוקה לקבוצות
> vals <- c("#FF0000", "#00FF00", "#0000FF", "#FF90C0", "#CC6600")
> p + geom_point(aes(color = continent)) + scale_color_manual(values = vals)
17 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Overplotting-פתרונות ל
> p + geom_point(alpha = 0.3, size = 2)
18
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Overplotting-פתרונות ל
> p + geom_bin2d()
19 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
החלקה
> p + geom_point() + geom_smooth()
20
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
החלקה
> p + geom_point() + geom_smooth(lwd = 1.5, se = FALSE)
21 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
קו רגרסיה
> p + geom_point() + geom_smooth(lwd = 1.5, se = FALSE, method = "lm")
22
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
החלקה
> p + aes(color = continent) + geom_point() + geom_smooth(lwd = 1.5, se = FALSE)
23 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Faceting
> p + geom_point(alpha = 0.3) + facet_wrap(~ continent)
24
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Faceting
> p + geom_point(alpha = 0.3) + facet_wrap(~ continent) + geom_smooth(se = FALSE)
25 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
תרגיל
שרטטו את תוחלת החיים כפונקציה של השנה לכל •
המדינות
דיאגרמת פיזור רגילה•
•faceting לפי יבשת
facetingבלי קו רגרסיה לינארית עם החלקה ועם •
facetingעם החלקה עם •
עם קווים שמחברים בין הנקודות של כל מדינה לאורך השנים•
26
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
subsetהפונקציה
> subset(gDat, country == "Italy" & year <= 1962)
country year pop continent lifeExp gdpPercap
763 Italy 1952 47666000 Europe 65.94 4931.404
764 Italy 1957 49182000 Europe 67.81 6248.656
765 Italy 1962 50843200 Europe 69.24 8243.582
> subset(gDat, country == "Italy" & year <= 1962, select=c(pop, lifeExp))
pop lifeExp
763 47666000 65.94
764 49182000 67.81
765 50843200 69.24
27 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
droplevelsהפונקציה
> x <- subset(gDat, country == "Italy" & year <= 1962)
> x
country year pop continent lifeExp gdpPercap
763 Italy 1952 47666000 Europe 65.94 4931.404
764 Italy 1957 49182000 Europe 67.81 6248.656
765 Italy 1962 50843200 Europe 69.24 8243.582
> x$continent
[1] Europe Europe Europe
Levels: Africa Americas Asia Europe Oceania
> x <- droplevels(subset(gDat, country == "Italy" & year <= 1962))
> x$continent
[1] Europe Europe Europe
Levels: Europe
28
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
subsetting
> ggplot(subset(gDat, country == "Italy"), aes(x=year, y=lifeExp)) + geom_line() + geom_point()
29 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
subsetting
> jCountries <- c("Canada", "Rwanda", "Cambodia")
> ggplot(subset(gDat, country %in% jCountries), aes(x = year, y = lifeExp, color = country)) + geom_line() + geom_point()
30
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
reorderהפונקציה
> 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
31 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
reorderהפונקציה
> 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
32
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
subsetting
> ggplot(subset(gDat, country %in% jCountries), aes(x = year, y = lifeExp, color = reorder(country, -lifeExp, max))) + geom_line() + geom_point() + labs(color="country")
33 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
היסטוגרמה
> ggplot(subset(gDat, continent == "Europe"), aes(lifeExp)) + geom_histogram()
34
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Stripplots
:לא כל כך טוב•> ggplot(gDat, aes(x = continent, y = lifeExp)) +
geom_point()
35 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Stripplots
:עדיף ככה•> ggplot(gDat, aes(x = continent, y = lifeExp)) +
geom_jitter()
36
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Stripplots
> ggplot(gDat, aes(x = continent, y = lifeExp)) + geom_jitter(position = position_jitter(width=0.4, height=0), alpha=0.25)
37 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Stripplots
> ggplot(gDat, aes(x = continent, y = lifeExp)) + geom_jitter(position = position_jitter(width=0.4),
alpha=0.25) + stat_summary(fun.y=median, color="red",
geom="point", size=5)
38
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Stripplots
איך משנים את התרשים הקודם כך שסדר : תרגיל•
?יהיה לפי חציון עולה stripplots-ה
39 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Boxplots
> ggplot(gDat, aes(x = continent, y = lifeExp)) + geom_boxplot()
40
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Boxplots
> ggplot(gDat, aes(x = continent, y = lifeExp)) + geom_boxplot(outlier.colour = "hotpink") + geom_jitter(position = position_jitter(width=0.4,
height=0), alpha=0.25)
41 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Bar charts
> ggplot(gDat, aes(x = continent)) + geom_bar()
42
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Bar charts
> ggplot(gDat, aes(x = reorder(continent, continent, length))) + geom_bar() + labs(x = "continent")
43 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Bar charts
> ggplot(gDat, aes(x = continent)) + geom_bar(width=0.2) + coord_flip()
44
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Bar charts
שברירת המחדל שלו , statיש ארגומנט geom_bar-ל•
“count"היא לכן הגובה של כל עמודה הוא מספר המדינות בכל יבשת•
?איך משרטטים עמודות בגבהים נתונים•
נניח שנתונה מסגרת הנתונים הבאה•
> cars
maker sold
1 Toyota 512
2 Audi 126
3 Honda 313
4 Fiat 88
45 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Bar charts
> ggplot(cars, aes(x = maker, y = sold)) + geom_bar(stat = "identity")
46
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
הוספת כותרת
> p <- ggplot(gDat, aes(x = gdpPercap, y = lifeExp)) + scale_x_log10() + aes(color = continent) + geom_point() + labs(x="GDP Per Capita", y="Life Expectancy")
> p + ggtitle("Life expectancy vs. GDP by continent")
47 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Themes
ויזואלי" סגנון"כל הגרפים שראינו עד עכשיו היו באותו •
ggthemesיש מבחר של סגנונות אחרים בספריה •
נטען את הספריה•
> library(ggthemes)
48
2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Themes
> p + theme_economist() + ggtitle("Life Exp. vs GDP, theme = economist")
49 2015/16, ו"תשע' בסמסטר • 5חלק • R -תכנות מתקדם ב
Themes
> p + theme_wsj() + ggtitle("Theme = WSJ")
50