פרק 5 תרשימים
5.1 Base plot
בניגוד כמעט לכל דבר אחר ב-R תרשימים אינם אובייקט. המשמעות של זה היא שללא חבילות נוספות, לא ניתן לשמור אותם בזיכרון, לעבוד על כמה גרפים במקביל, וכדומה.
5.1.1 פקודת plot
- בחבילה
graphics
ניצור גרף ע”י שימוש בפקודהplot
(או לחילופיןhist
) - לאחר שניצור את הגרף הוא יודפס בלשונית הגרפים בתחתית המסך מימין.
- ארגומנטים חשובים לפונקצית
plot
:main
כותרת לתרשיםpch
(‘ייצוג של כל תצפית (נק’ ריבוע עיגול וכוcex
גודל הסימולcol
צבע הקו/נקודהxlab
ylab
כותרות לציריםxlim
ylim
גבולות התרשים
נראה כיצד אני משתמש בארגומנטים האלו ביצירת הגרף הבא:
attach(airquality)
plot(x =Ozone, y=Temp)
plot(x =Ozone, y=Temp, main="מזג אוויר", xlab="אוזון",ylab = "טמפרטורה",xlim = c(0,100),pch=4,col="red",cex=2)
plot(x =Ozone, y=Temp, col=Month)
plot(1, 1, xlim=c(1,5.5), ylim=c(0,7), type="n", ann=FALSE)
# Plot symbols 0-4 with increasing size and color
points(1:5, rep(5,5), cex=1:5, col=1:5, pch=0:4)
text((1:5)+0.4, rep(5,5), cex=0.6, (0:4))
# Plot symbols 5-9 with labels
points(1:5, rep(4,5), cex=2, pch=(5:9))
text((1:5)+0.4, rep(4,5), cex=0.6, (5:9))
# Plot symbols 10-14 with labels
points(1:5, rep(3,5), cex=2, pch=(10:14))
text((1:5)+0.4, rep(3,5), cex=0.6, (10:14))
# Plot symbols 15-19 with labels
points(1:5, rep(2,5), cex=2, pch=(15:19))
text((1:5)+0.4, rep(2,5), cex=0.6, (15:19))
# Plot symbols 20-25 with labels
points((1:6)*0.8+0.2, rep(1,6), cex=2, pch=(20:25))
text((1:6)*0.8+0.5, rep(1,6), cex=0.6, (20:25))
#source: https://sites.harding.edu/fmccown/r/
5.1.1.0.1 תוספות לגרף קיים
נוכל להוסיף מידע לגרף האחרון שעליו אנחנו עובדים
- קווים
אם רוצים להוסיף קו ישר, הדרך הנוחה לעשות זאת היא ע”י שימוש ב
abline
. בפקודה זו אנחנו מגדירים את השיפוע של הקו ואת החותך שלו
plot(x =Ozone, y=Temp)
abline(a=60,b=0.3,lty=3,lwd=4,col="blue")
כמוכן, ניתן להשפיע על הקו באמצעות הארגומנטים:
- lty
סגנון הקו
- lwd
עובי הקו
ניתן להגדיר גם קווים אופקיים תוך שימוש בארגומנט h
וקווים אנכיים באמצעות הארגומנט v
כאשר הם מגדירים את נק’ החיתוך עם הציר הרלוונטי.
plot(x =Ozone, y=Temp)
abline(h=80,col="blue")
abline(v=50,col="orange")
- טקסט כדי להוסיף טקסט אנחנו מציינים את הקואורדינטה שבה נרצה להוסיף את הטקסט ואת הטקסט שנרצה להכניס באותה הנקודה.
plot(x =Ozone, y=Temp)
text(150,60,"lower right")
text(c(150,10),c(90,90),
c("upper right","upper left"),
col="blue")
- נקודות
אם אנחנו רוצים להוסיף נקודות ניתן להשתמש בפקודת
point
plot(x =Ozone, y=Temp)
points(x=rnorm(10,100,10),y=rep(70,10),pch=17,col="red")
5.1.2 פקודת hist
להכנת היסטוגרמה נשתמש בפקודת hist
- נוכל לשלוט במספר העמודות ע”י
breaks
(יכול לקבל סקלר או ווקטור עםהגבולות של כל עמודה ועמודה)
hist(Ozone,breaks = c(0,20,80,120,200))
hist(Ozone,breaks = 4)
5.1.3 פקודת pairs
מאד נוחה כדי להראות קורלציות בין כל צמדי המשתנים בדאטה
pairs(airquality)
detach(airquality)
5.1.4 ייצוא גרפים
- אופציה ראשונה היא להשתמש בכפתור הייצוא של הגרף שאנחנו מכינים, הבעיה היא שהאופציה הזו ידנית.
בגלל שאנחנו עצלנים, ובגלל שכל דבר שאנחנו חושבים שנעשה רק פעם אחת בסוף אנחנו עושים אלף כדאי מאד להימנע מהדרך הזו
אם לא השתכנעתם חפשו את כפתור
export
בלשונית של הגרפים בצד ימין למטה - אפשרות אחרת היא להגיד ל-R איפה אנחנו רוצים לשמור את הגרף ובאיזה פורמט, עוד לפני שייצרנו אותו.
כשנעשה את זה, בכלל לא נראה אותו בלשונית הגרפים.
מה שקורה מאחורי הקלעים הוא ש-R בתור ברירת מחדל שומר את הגרף רק ללשונית הגרפים ונוכל להשתמש בפקודת
png
jpeg
pdf
tiff
וכדומה בכדי לשמור את הגרף באותה הסיומת
לאחר שנסיים לייצר את ההגרף נרצה להחזיר את ברירת המחדל ללשונית הגרפים ע”י שימוש בפקודה dev.off()
שימו לב שבצורה זו יישמר רק גרף אחד- בפרט, הגרף האחרון.
png(filename = "temp.png")
plot(rnorm(10),rnorm(10))
dev.off()
## png
## 2
אם נרצה להגדיר מס’ של גרפים בתור תמונה אחת, כלומר להצמיד גרפים זה לצד זה, נשתמש בפקודה
par(mfrow)
par(mfrow=c(2,3))
plot(rnorm(10),rnorm(10))
plot(rnorm(10),rnorm(10))
plot(rnorm(10),rnorm(10))
plot(rnorm(10),rnorm(10))
plot(rnorm(10),rnorm(10))
plot(rnorm(10),rnorm(10))
לא לשכוח להחזיר למצב הרגיל בסיום הפעולה הזו ע”י הפקודה
par(mfrow=c(1,1))
5.2 ggplot2
אחת החבילות הכי פופולאריות ב-R
אחד ההבדלים המרכזיים הוא שבניגוד למערכת הרגפים הבסיסית, בggplot
כל גרף הוא אובייקט.
נכיר את הלב של ggplot
ע”י בנייה של גרף בשלבים.
5.2.1 Data
השלב הראשון של בניית הגרף הוא בחירת הדאטה שבו נשתמש.
library(ggplot2)
ggplot(data = airquality)
שימו לב שהגרף עדיין לא מופק אלא רק ה”שלד” שלו, עדיין לא הגדרנו מה יש על הצירים/ סוג הגרף וכן הלאה. זה בדיוק מה שנעשה בשלבים הבאים
5.2.2 aes- “אסטתיקה”
ממפה בין משתנים לבין הייצוג הגרפי שלהם
כן נוכל.
בתוך הaes
נגדיר את הצירים, את חלוקת הצבעים
$Month<-as.factor(airquality$Month)
airquality<- ggplot(data = airquality,aes(x=Ozone, y=Temp,colour=Month)) p
בדומה לאובייקטים אחרים בR
, גם כאן, כאשר אנחנו שומרים את האובייקט הוא לא מודפס בלשונית הגרפים, כדי להדפיס אותו אני צריך לקרוא לו בצורה מפורשת ע”י כתיבה בקונסולה של שם האובייקט p
p
5.2.3 geom- סוג הגרף
בggplot2
לא מעט סוגי גרפים, כדאי להציץ ב
(cheatsheet){https://github.com/rstudio/cheatsheets/raw/master/data-visualization-2.1.pdf}
סוגי הגרפים מתחילים בgeom_
עם ציון סוג הגרף.
כעת נייצר תרשים דומה לתרשים שייצרנו ב base r plot
<-p+geom_point()
p p
אני בעצם לוקח את הגרף שקראתי לו p
ומוסיף לו עוד שכבה (geom_plot
) ושומר את זה שוב בתור גרף אובייקט בשם p
.
5.2.4 facet מס’ גרפים במקביל
ניתן לפרוס את הדאטה בתרשים על פנ מס’ גרפים צמודים
ע”י שימוש בפקודה facet_wrap
בפקודה זו נגדיר לפי אילו משתנים נרצה לבצע את החלוקה.
+facet_wrap(~Month) p
- הערה- שימוש ב
facet_wrap(~Month+day)
היה מאפשר לי לפרוס את הגרפים כך שבכל תת גרף יש רק תצפיות מאותו היום ואותו החודש.
5.2.4.1 פיצול לדפים שונים
אם הייתי רוצה לחלק את את הגרף למס’ גדול של תתי-גרפים שימוש בfacet_wrap
איננו נוח
למשל אם אני רוצה גרף בו כל תת-גרף מכיל תצפיות מאותו היום בחודש.
+facet_wrap(~Day) p
הפתרון עבור מצבים כאלה הוא שימוש בחבילת ggforce
library(ggforce)
<- ceiling(length(unique(airquality$Day)) / 9)
n_pages
# Draw each page
for (i in seq_len(n_pages)) {
<-p+
facet_pfacet_wrap_paginate(~Day,scales = "free_y", ncol = 3, nrow = 3, page = i)
print(facet_p)
}
5.2.5 אפשרויות נוספות
- כותרות
ggtitle
- כותרת ראשיתxlab
ylab
- כותרות לציריםlabs
מכיל את הפונקציות לעיל
+ggtitle("New plot")+xlab("X label")+ylab("y label") p
- מקרא
-
theme(legend.position = "bottom")
איפה נרצה להכניס את המקרא- לפי האפשרויות:bottom
,top
,left
,right
,none
+theme(legend.position = "top") p
כדי לשנות את הכותרת של המשתנה או את הערכים במקרא
+ scale_color_discrete(name = "Title:", labels = c("May","June","July","August","September")) p
אם אני רוצה לשנות גם את בחירת הצבעים עצמה למשל כאשר אני רוצה לשמור על אותם הצבעים על פני מספר גרפים
אני מגדיר את צבע לכל אחד מהחודשים באופן הבא
<- c("5" = "#E69F00", "6" = "#56B4E9",
cols "7" = "#009E73", "8" = "#0072B2", "9"= "#CC79A7")
ואז משתמש בפקודה scale_color_manual
ולהוסיף ארגומנט values
+ scale_colour_manual(values = cols,
p name = "Title:", labels = c("May","June","July","August","September"))
כאשר עובדים עם geoms
הצבע יוגדר ע”י הארגומנט color
.
כאשר נעבוד עם geoms
עם שטח נשתמש בארגומנט fill
.