פרק 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. בפקודה זו אנחנו מגדירים את השיפוע של הקו ואת החותך שלו \(Y=a+bX\)
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 ייצוא גרפים

  1. אופציה ראשונה היא להשתמש בכפתור הייצוא של הגרף שאנחנו מכינים, הבעיה היא שהאופציה הזו ידנית. בגלל שאנחנו עצלנים, ובגלל שכל דבר שאנחנו חושבים שנעשה רק פעם אחת בסוף אנחנו עושים אלף כדאי מאד להימנע מהדרך הזו אם לא השתכנעתם חפשו את כפתור export בלשונית של הגרפים בצד ימין למטה
  2. אפשרות אחרת היא להגיד ל-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 נגדיר את הצירים, את חלוקת הצבעים

airquality$Month<-as.factor(airquality$Month)
p<- ggplot(data = airquality,aes(x=Ozone, y=Temp,colour=Month))

בדומה לאובייקטים אחרים ב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<-p+geom_point()
p

אני בעצם לוקח את הגרף שקראתי לו p ומוסיף לו עוד שכבה (geom_plot) ושומר את זה שוב בתור גרף אובייקט בשם p.

5.2.4 facet מס’ גרפים במקביל

ניתן לפרוס את הדאטה בתרשים על פנ מס’ גרפים צמודים ע”י שימוש בפקודה facet_wrap בפקודה זו נגדיר לפי אילו משתנים נרצה לבצע את החלוקה.

p+facet_wrap(~Month)

  • הערה- שימוש ב facet_wrap(~Month+day) היה מאפשר לי לפרוס את הגרפים כך שבכל תת גרף יש רק תצפיות מאותו היום ואותו החודש.

5.2.4.1 פיצול לדפים שונים

אם הייתי רוצה לחלק את את הגרף למס’ גדול של תתי-גרפים שימוש בfacet_wrap איננו נוח

למשל אם אני רוצה גרף בו כל תת-גרף מכיל תצפיות מאותו היום בחודש.

p+facet_wrap(~Day)

הפתרון עבור מצבים כאלה הוא שימוש בחבילת ggforce

library(ggforce)
n_pages <- ceiling(length(unique(airquality$Day)) / 9) 

# Draw each page
for (i in seq_len(n_pages)) {
   facet_p<-p+
    facet_wrap_paginate(~Day,scales = "free_y", ncol = 3, nrow = 3, page = i)
   print(facet_p)
  }    

5.2.5 אפשרויות נוספות

  • כותרות
  • ggtitle- כותרת ראשית
  • xlab ylab- כותרות לצירים
  • labs מכיל את הפונקציות לעיל
p+ggtitle("New plot")+xlab("X label")+ylab("y label")

  • מקרא -theme(legend.position = "bottom") איפה נרצה להכניס את המקרא- לפי האפשרויות: bottom, top,left, right, none
p+theme(legend.position = "top")

כדי לשנות את הכותרת של המשתנה או את הערכים במקרא

p + scale_color_discrete(name = "Title:", labels = c("May","June","July","August","September"))

אם אני רוצה לשנות גם את בחירת הצבעים עצמה למשל כאשר אני רוצה לשמור על אותם הצבעים על פני מספר גרפים

אני מגדיר את צבע לכל אחד מהחודשים באופן הבא

cols <- c("5" = "#E69F00", "6" = "#56B4E9",
          "7" = "#009E73", "8" = "#0072B2", "9"= "#CC79A7")

ואז משתמש בפקודה scale_color_manual ולהוסיף ארגומנט values

p + scale_colour_manual(values = cols,
                         name = "Title:", labels = c("May","June","July","August","September"))

כאשר עובדים עם geoms הצבע יוגדר ע”י הארגומנט color. כאשר נעבוד עם geoms עם שטח נשתמש בארגומנט fill.

5.2.6 היסטוגרמה

p<-ggplot(airquality, aes(x=Ozone)) +
  geom_histogram(bins = 4)
p

5.2.7 שמירת גרפים

ניתן לשמור גרף לjpeg pdf png tiff וכדומה, כדי לעשות זאת נשתמש בפקודה ggsave

היא יכולה להגיע בצמוד לגרף או לשמור גרף מתוך סביבת העבודה

ggsave(filename = "temp.pdf",plot=p)
## Saving 7 x 5 in image

או

p+ggtitle("save me")+
  ggsave(filename = "temp2.jpeg")
## Saving 7 x 5 in image