การสร้างกราฟด้วย package ggplot2

สำหรับการสร้างกราฟด้วยภาษาอาร์ ในบทนี้และหนังสือเล่มนี้ จะใช้ package ggplot2 ในการสร้างเพราะชุดคำสั่งนี้ มีสามารถวาดกราฟได้อย่างสวยงามและมีกราฟหลายแบบให้เลือกใช้ในหนังสือเล่มนี้จะ ใช้คำสั่ง qplot ในการวาดกราฟ ที่จำเป็นเบื้องต้นสำหรับสำหรับการวิเคราะห์และเตรียมข้อมูลเบื้องต้น ข้อมูลที่ใช้วิเคราะห์ควรจัดรูปแบบให้ใบของกรอบข้อมูลเสนอเพื่อให้ง่ายต่อการนำไปใช้

การเรียกใช้งาน package ggplot2

หนังสือเล่มนี้ขอแนะนำให้ผู้อ่านลง package tidyverse เพราะpackage มีpackage ggplot2 อยู่ในชุดคำสั่งนี้อยู่แล้ว จะยังชุดคำสะ้งที่น่าสนใจอื่นๆ อีก ถ้ามีโอกาสจะแนะนำให้บทต่อๆ ไป หรือหนังสือเล่มใหม่ในอนาคต

library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ ggplot2 3.3.5     ✓ purrr   0.3.4
## ✓ tibble  3.1.2     ✓ dplyr   1.0.7
## ✓ tidyr   1.1.3     ✓ stringr 1.4.0
## ✓ readr   1.4.0     ✓ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()

Scatter plot

สำหรับการวาดกราฟ scatter plot เป็นการวาดเพื่อความสัมพันธ์ระหว่าง ตัวแปรต้น กับตัวแปรตามจะลักษณะเป็นอย่างไร เป็นข้อมูลที่ใช้ ชุดข้อมูลของคู่อันดับ\(x_i,y_i)\) เช่น ถ้าพิจารณาข้อมูลเช่น mtcars

str(mtcars)
## 'data.frame':    32 obs. of  11 variables:
##  $ mpg : num  21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
##  $ cyl : num  6 6 4 6 8 6 8 4 4 6 ...
##  $ disp: num  160 160 108 258 360 ...
##  $ hp  : num  110 110 93 110 175 105 245 62 95 123 ...
##  $ drat: num  3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
##  $ wt  : num  2.62 2.88 2.32 3.21 3.44 ...
##  $ qsec: num  16.5 17 18.6 19.4 17 ...
##  $ vs  : num  0 0 1 1 0 1 0 1 1 1 ...
##  $ am  : num  1 1 1 0 0 0 0 0 0 0 ...
##  $ gear: num  4 4 4 3 3 3 3 4 4 4 ...
##  $ carb: num  4 4 1 1 2 1 4 2 2 4 ...

ถ้าเราสนใจ ความสัมพันธ์ ระหว่าง แรงม้า(hp)กับอัตราการกินน้ำมัน(ไมล์/แกลลอน)(mpg) สามารถใช้คำสั่ง

ggplot(data=mtcars,      # ข้อมูลที่ใช้คือ mtcars
       aes(x=hp,y=mpg))+ # แกน x คือตัวแปร hp แกน y คือตัวแปร mpg
geom_point()             # สร้างกราฟจุด

ถ้าต้องการเห็นรายละเอียดเพิ่มเติมว่า ตัวแปรแรงม้า(hp)นั้นมีจำนวนกี่สูบ(cyl)ก็สามารถใช้คำสั่ง

ggplot(data=mtcars,    # ข้อมูลที่ใช้คือ mtcars
       aes(x=hp,y=mpg, # แกน x คือตัวแปร hp แกน y คือตัวแปร mpg
           color=cyl   # แสดงตัวแปร cyl โดยการให้มีสี
           ))+  
geom_point()    # สร้างกราฟจุด

ข้อสังเกตุ คำสั่ง color คือการให้สีแกตัวแปร cyl ซึ่งเป็นจำนวนลูกสูบในเครื่องยนต์ ซึ่งเป็นจำนวนเต็ม แต่ ตัวแปรนี้เป็นข้อมูลแบบตัวเลขจำนวนจริง ดังนั้น จะควรใช้คำสั่ง factor(cyl) ช่วยซึ่งจะทำให้ ตัวแปรนี้ถูกมองเป็นตัวแปรอักษรที่สามารถนำมาเปรียบเทียบค่ากันได้

ggplot(data=mtcars,          # ข้อมูลที่ใช้คือ mtcars
       aes(x=hp,y=mpg,       # แกน x คือตัวแปร hp แกน y คือตัวแปร mpg
           color=factor(cyl) # แสดงตัวแปร factor(cyl)โดยการให้มีสี
           ))+
       geom_point()          # สร้างกราฟจุด

จะมีชัดเจนและเห็นภาพข้อมูลขัดเจนกว่าเดิม คำถาม จากภาพข้างต้นนี้ผู้เห็นความสัมพันธ์มบ้าง ระหว่าง แรงม้ากับ การกินน้ำมัน หรือ จำนวนแรงม้า ต่อลูกสูบ ถ้าพิจารณาแยกเป็น 3 กราฟของความสัมพันธ์ีระหว่างแรงม้ากับการกินน้ำมัน โดยใช้จำนวนลูกสูบสามารถใช้คำสั่ง facet เพิ่มลงไปจะได้

ggplot(data=mtcars,
       aes(x=hp,y=mpg,color=factor(cyl)))+
geom_point()+
# แยกเป็นกราฟย่อมด้วยด้วยตัวแปร factor(cyl)โดยใช้สดมภ์
facet_wrap(facets=.~factor(cyl)) 

หรือจะแยกโดยใช้แถว

ggplot(data=mtcars,aes(x=hp,y=mpg,color=factor(cyl)))+
geom_point()+
  # แยกเป็นกราฟย่อมด้วยด้วยตัวแปร factor(cyl)โดยใช้แถว
facet_grid(facets=factor(cyl)~.)

ตัวอย่างต่อจะเป็นการดูความสัมพันธ์ระหว่างความเร็วกับระยะทางของการหยุด จากข้อมูล cars และมีการ plotความเส้นการถดถอย

# แสดงข้อมูลเบื้องต้นของกรอบข้อมูล cars
str(cars)
## 'data.frame':    50 obs. of  2 variables:
##  $ speed: num  4 4 7 7 8 9 10 10 10 11 ...
##  $ dist : num  2 10 4 22 16 10 18 26 34 17 ...
ggplot(data=cars,  # ข้อมูลที่ใช้ cars
       aes(x=speed,y=dist) # แกน x คือ speed แกน y คือ dist
       )+
geom_point()+   # วาดกราฟจุด
geom_smooth()   # เพิ่มเส้นการถดถอยและช่วงความเชื่อมั่น 
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

ในกรณีที่ไม่ต้องการช่วงความเชื่อมั่น(condidence interval) พื้นที่สีเทา ก็สามารถ ใช้คำสั่งได้ดังนี้

ggplot(data=cars,  # ข้อมูลที่ใช้ cars
       aes(x=speed,y=dist) # แกน x คือ speed แกน y คือ dist
       )+
geom_point()+   # วาดกราฟจุด
geom_smooth(se=FALSE)    # เพิ่มเส้นการถดถอยและไม่แสดงช่วงความเชื่อมั่น 
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

ถ้าต้องการตั้งชื่อของกราฟ ก็สามารถใช้คำสั่ง lab() เพิ่มเข้าไปโดยเขียนดังนี้

ggplot(data=cars,  # ข้อมูลที่ใช้ cars
       aes(x=speed,y=dist) # แกน x คือ speed แกน y คือ dist
       )+
geom_point()+   # วาดกราฟจุด
geom_smooth(se=FALSE)+    # เพิ่มเส้นการถดถอยและไม่แสดงช่วงความเชื่อมั่น 
# ตั้งชื่อกราฟ
labs(title = "กราฟแสดงความสัมพันธ์ระหว่างความเร็วกับระยะทางในการหยุดรถ")
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

จะเห็นว่า ภาษาไทยไม่สามารถใช้งานได้ จำเป็นใช้คำสั่งเพิ่ม ในการกำหนด font ที่ต้องการใช้ใน กราฟนี้ขึ้นมาก่อน

ggplot(data=cars,  # ข้อมูลที่ใช้ cars
       aes(x=speed,y=dist) # แกน x คือ speed แกน y คือ dist
       )+
geom_point()+   # วาดกราฟจุด
geom_smooth(se=FALSE)+    # เพิ่มเส้นการถดถอยและไม่แสดงช่วงความเชื่อมั่น 
# ตั้งชื่อกราฟ
labs(title = "กราฟแสดงความสัมพันธ์ระหว่างความเร็วกับระยะทางในการหยุดรถ")+
# ใช้ฟ้อนด์ TH Sarabun New  
theme(text = element_text(family = "TH Sarabun New"))
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

ถ้าต้องการแก้ข้อความตามที่ใต้ แกน X และแกน Y ให้ให้คำสั่ง x และ y ตาม ลำดับ เช่น

ggplot(data=cars,aes(x=speed,y=dist))+
geom_point()+geom_smooth(se=FALSE)+
  labs(title = "กราฟแสดงความสัมพันธ์ระหว่างความเร็วกับระยะทางในการหยุดรถ",
      x = "ความเร็ว(mph)",  # ตั้งชื่อแกน x
      y = "ระยะเบรค(ft.)"  # ตั้งชื่อแกน y
     )+   
theme(text = element_text(family = "TH Sarabun New"))
## `geom_smooth()` using method = 'loess' and formula 'y ~ x'

## บาร์กราฟ(bar chart) บาร์กราฟ ก็คือกราฟแท่งนั้นเองซึ่งเป็นการนับว่าตัวแปรนี้ประกอบไปด้วย ข้อมูลนี้กี่ค่า เช่นข้อมูลชุด mpg จาก package tidyverse

# แสดงข้อมูลเบื้องต้นของกรอบข้อมูล mpg
str(mpg)
## tibble [234 × 11] (S3: tbl_df/tbl/data.frame)
##  $ manufacturer: chr [1:234] "audi" "audi" "audi" "audi" ...
##  $ model       : chr [1:234] "a4" "a4" "a4" "a4" ...
##  $ displ       : num [1:234] 1.8 1.8 2 2 2.8 2.8 3.1 1.8 1.8 2 ...
##  $ year        : int [1:234] 1999 1999 2008 2008 1999 1999 2008 1999 1999 2008 ...
##  $ cyl         : int [1:234] 4 4 4 4 6 6 6 4 4 4 ...
##  $ trans       : chr [1:234] "auto(l5)" "manual(m5)" "manual(m6)" "auto(av)" ...
##  $ drv         : chr [1:234] "f" "f" "f" "f" ...
##  $ cty         : int [1:234] 18 21 20 21 16 18 18 18 16 20 ...
##  $ hwy         : int [1:234] 29 29 31 30 26 26 27 26 25 28 ...
##  $ fl          : chr [1:234] "p" "p" "p" "p" ...
##  $ class       : chr [1:234] "compact" "compact" "compact" "compact" ...

ถ้าเราต้องการนับว่า ตัวแปร class ประกอบไปด้วยรถประเภทใดบ้าง จำนวนเท่าไหร่ ถ้าต้องการนับเรา จำเป็นต้องเปลี่ยนจากข้อมูลชนิด chr เป็น factor โดยใช้คำสัั่ง factor(mpg$class) และใช้คำสั่ง count จาก package plyr ก็จะได้กรอบข้อมูลออกมาดังนี้

library(plyr)
## ------------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## ------------------------------------------------------------------------------
## 
## Attaching package: 'plyr'
## The following objects are masked from 'package:dplyr':
## 
##     arrange, count, desc, failwith, id, mutate, rename, summarise,
##     summarize
## The following object is masked from 'package:purrr':
## 
##     compact
library(dplyr)
Class <- count(factor(mpg$class))
Class
##            x freq
## 1    2seater    5
## 2    compact   47
## 3    midsize   41
## 4    minivan   11
## 5     pickup   33
## 6 subcompact   35
## 7        suv   62

จะเห็นกรอบข้อมูล Class มีตัวแปร x ที่เก็บข้อมูลชนิดของรถและตัวแปร freq ที่เก็บข้อมูลจำนวนของรถแต่ละชนิด จากนี้สามารถใช้คำสั่ง ggplot วาดกราฟแท่งได้ดังนี้

ggplot(data=Class, #  ช้อมูลคือ Class
       aes(x=x,y=freq) # แกน x คือ x แกน y คือ freq
       )+
geom_bar(stat="identity") # วาดกราฟแท่ง

ถ้าต้องการให้กราฟแท่งเป็นสี ทำได้โดย

ggplot(data=Class, #  ช้อมูลคือ Class
       aes(x=x,y=freq, # แกน x คือ x แกน y คือ freq
          fill=x       # ใส่สีโดยใช้ x เป็นตัวแยก
          ))+
geom_bar(stat="identity")

ถ้าต้องการใส่หัวข้อ ก็ได้ในทำนองเดียวกัน

ggplot(data=Class,aes(x=x,y=freq,fill=x))+
geom_bar(stat="identity")+# วาดกราฟแท่ง
# แสดงค่าตัวเลขเหนือกราฟแท่ง  
geom_text(aes(label=freq), vjust=-0.25)+
# ตั้งชื่อกราฟ
labs(title = "กราฟแท่งแสดงจำนวนรถทั้งหมดแยกตามประเภท")+
# เปลี่ยนฟ้อนด์ เพื่อแสดงภาษาไทย
theme(text = element_text(family = "TH Sarabun New"))

ทดลอง ให้ผู้อ่าน ลองเปลี่ยนตัวเลขใน vjust

ถ้าต้องการสลับแกน x กับ แกน y ทำได้โดยใช้คำสั่ง coord_flip()

ggplot(data=Class,aes(x=x,y=freq,fill=x))+
geom_bar(stat="identity")+# วาดกราฟแท่ง
# แสดงค่าตัวเลขเหนือกราฟแท่ง  
geom_text(aes(label=freq), hjust=-.25)+
# ตั้งชื่อกราฟ
labs(title = "กราฟแท่งแสดงจำนวนรถทั้งหมดแยกตามประเภท")+
# เปลี่ยนฟ้อนด์ เพื่อแสดงภาษาไทย
theme(text = element_text(family = "TH Sarabun New"))+
# สลับแกน
coord_flip() 

ทดลอง ให้ผู้อ่าน ลองเปลี่ยนตัวเลขใน hjust ## การสร้างกราฟวงกลมด้วย คำสั่ง ggplot() กราฟวงกลมหรือ pi chart

ggplot(data=Class,aes(x="",y=rev(freq),fill=x))+
geom_bar(stat = "identity")+
coord_flip()+
coord_polar("y", start=0)+ 
theme_minimal()+
scale_y_continuous(breaks=c(cumsum(Class$freq)))+ 
ggtitle("กราฟวงกลมแสดงสัดส่วนของรถประเภทต่างๆ ")+
theme(text = element_text(family = "TH Sarabun New"))
## Coordinate system already present. Adding new coordinate system, which will replace the existing one.

# package scales สำหรับแปลงข้อมูลเป็น %
library(scales)
## 
## Attaching package: 'scales'
## The following object is masked from 'package:purrr':
## 
##     discard
## The following object is masked from 'package:readr':
## 
##     col_factor
ggplot(data=Class,aes(x="",y=rev(freq/sum(Class$freq)),fill=x))+
geom_bar(stat = "identity")+
coord_polar("y")+
scale_y_continuous(breaks=round(c(cumsum(Class$freq)/sum(Class$freq)),2))  +  
geom_text(aes(label = paste0(rev(round(c(Class$freq/sum(Class$freq))*100,2)), "%")),
           position = position_stack(vjust = 0.5))  +
theme_minimal()+
ggtitle("กราฟวงกลมแสดงสัดส่วนของรถประเภทต่างๆ ")+
theme(text = element_text(family = "TH Sarabun New"))
## Warning: Use of `Class$freq` is discouraged. Use `freq` instead.

## Warning: Use of `Class$freq` is discouraged. Use `freq` instead.

## Warning: Use of `Class$freq` is discouraged. Use `freq` instead.

## Warning: Use of `Class$freq` is discouraged. Use `freq` instead.

## กราฟเส้นLine chart) กราฟชนิดนี้ ก็เป็นท่ี่กราฟที่นิยมแบบหนึ่ง สำหรับการแสดงผลลัพธ์ ที่ช่วยให้ผู้อ่านเช้าใจได้ง่ายขึ้น เหมาะสำหรับช้อมูลตัวเลขที่เงื่อนไขเรื่องเวลาม่เกี่ยวข้องและมีความห่างของเวลา เท่าๆ กันสำหรับข้อมูลตัวต่อไป

ggplot(data=Class,aes(x=x,y=freq,group=1))+
geom_line()

ถ้าต้องการให้เส้นมี สี ทำได้โดย

ggplot(data=Class,aes(x=x,y=freq,group=1))+
geom_line(color="red", # เลือกใช้สีแดง
          size=1)      #  ขนาดของเส้นคือ 1

ทดลอง ลองเปลี่ยน size เป็น \(2,3,4,5,6,\cdots\) ดู

ถ้าต้องเพิ่มกราฟโดยให้มีจุดด้วย

ggplot(data=Class,aes(x=x,y=freq,group=1))+
geom_line(color="red",size=1)+
geom_point(color="blue",size=1) # ใช้จุดสีฟ้าและมีขนาดเป็น 1

ถ้าต้องการเพิ่มกราฟแท่งด้วย

ggplot(data=Class,aes(x=x,y=freq,group=1))+
geom_bar(aes(x=x,y=freq,fill=x),stat="identity")+
geom_line(color="red",size=1)+
geom_point(color="blue",size=1)

ช้อสังเกตุ ลำดับใส่คำสั่งมีผลต่อรูปกราฟที่ได้ จากกราฟข้างบน ให้ผู้อ่านลอง สลับคำสั่งระหว่าง geom_bar geom_point และ geom_bar ดูว่ากราฟที่ได้จะเหมือนหรือแตกต่างกันอย่างไร ข้อมูลแบบกรอบข้อมูลมีประโยชน์มาก ถ้าผู้อ่านมาสามารถจัดเรียงให้ดี การสร้างกราฟจะง่ายขึ้นในบ้างกรณี เช่น

set.seed(1)
# ตัวแปรเดือนแบบตัวอักษร
Month<- c("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct")
# เปลี่ยนตัวแปรเป็น factor เรียงลำดับจาก Jan-Oct
Month<- factor(Month,levels=Month,ordered=T)
# สร้างกรอบข้อมูล Data_set
Data_set<- data.frame(Month = Month,
                       Bua  = rnorm(10,0,1), # สุ่ม 10 ค่าจาก N(0,1)
                       Pi   = rnorm(10,0,1), # สุ่ม 10 ค่าจาก N(0,1)
                       Norm = rnorm(10,0,1)) # สุ่ม 10 ค่าจาก N(0,1)
# สร้างกรอบข้อมูล Data_set2
Data_set2<-data.frame(Month = rep(Month,3), # สร้างเดือน jan-Oct 3 ครั้ง
                      # สร้าง Bua Pi และ Norm คำละ 10 ครั้ง
                      Name  = rep(c("Bua","Pi","Norm"),1,each=10),
                      value = c(Data_set$Bua, # ข้อมูลจาก Data_set$Bua
                                Data_set$Pi,# ข้อมูลจาก Data_set$Pi
                                Data_set$Norm)) # ข้อมูลจาก Data_set$Norm

จะเห็นว่า กรอบข้อมูลทั้งสองนี้ เหมือนกัน แตกต่างกันที่จัดวางตัวแปร

ggplot(data=Data_set)+
geom_line(aes(x=Month,y=Bua,color="red",group=1),stat="identity")+
geom_line(aes(x=Month,y=Pi,color="blue",group=1),stat="identity")+
geom_line(aes(x=Month,y=Norm,color="green",group=1),stat="identity")

ggplot(data=Data_set2)+
geom_line(aes(x=Month,y=value,group=Name,color=Name),stat="identity")

ผลลัพธ์ของกราฟทั้งสองเหมือนกัน แต่แตกต่างกันการเขียนคำสั่งมีความยาวและสั้นที่แตกต่างกัน การสร้างกรอบข้อมูลยังมีเรื่องที่ต้องศึกษาอีกมาก ขอให้ผู้อ่านศึกษาเพิ่มเติมด้วยตนเอง

ฮิสโตแกรม(histogram)

กราฟชนิดนี้เป็นกราฟที่ดูลักษณะการกระจายของของข้อมูลหรือกลุ่มตัวอย่าง ว่าน่าจะมีการแจกความน่าจะเป็นอย่างไร ยิ่งข้อมูลมีจำนวนมาก ค่าสถิติต่างๅ ยิ่งมีความแม่นยำมากขึ้น สมมุติ สุ่มข้อมูลจากการแจกแจงปกติ ที่ที่ค่า \(\mu=0\) และ \(\sigma=1\) จำนวน 100 1,000 และ 10,000 ตามลำดับ

set.seed(1)
# กรอบข้อมูล X1 สุ่มข้อมูล 100 ตัวจาก N(0,1)
X1<-data.frame(x=rnorm(100,0,1))
# กรอบข้อมูล X2 สุ่มข้อมูล 1000 ตัวจาก N(0,1)
X2<-data.frame(x=rnorm(1000,0,1))
# กรอบข้อมูล X3 สุ่มข้อมูล 10000 ตัวจาก N(0,1)
X3<-data.frame(x=rnorm(10000,0,1))

ฮิสโตแกรม ด้วย ggplot สร้างง่ายๆ โดยใข้คำสั่ง

# ลองวาดกราฟ X1
ggplot(data=X1,aes(x=x))+
geom_histogram(color="blue",fill="red",alpha=0.5)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ให้ผู้อ่านทดลอง เปลี่ยนสีที่ color และ fill ดู หรือนำ color และ fill ออกไปก็ได้ และลองค่า alpha ระหว่าง 0 ถึง 1 ดูว่าจะเกิดอะไรขึ้น

# ลองวาดกราฟของ X2
ggplot(data=X2,aes(x=x))+
geom_histogram(color="blue",fill="red",alpha=0.5)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

# ลองวาดกราฟของ X2
ggplot(data=X3,aes(x=x))+
geom_histogram(color="blue",fill="red",alpha=0.5)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

จะเห็นว่ายิ่งจำนวนข้อมูลมีจำนวนมากรูปร่างที่ได้จะคล้ายกับการแจกแจง \(N(0,1)\) มากยิ่งขึ้น

ggplot(data=X3,aes(x=x))+
geom_histogram(aes(y=..density..), # เปลี่ยน scale เป็น density
               color="green",
               fill="blue",alpha=0.7)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

ส่วนการตั้งชื่อ และอื่นๆ ก็ทำได้ตามปกติ

# ส่ม 10000 ตัวจาก N(1,2)
Sample1<-rnorm(10000,1,2)
# ส่ม 10000 ตัวจาก N(5,1)
Sample2<-rnorm(10000,5,1)
# สร้างกรอบข้อมูล
Sample<-data.frame( sex = rep(c("M","F"),1,each = 10000),
                  value = c(Sample1,Sample2))
# วาดกราฟ เพื่อเปรียบเทียบกัน
ggplot(data=Sample,
       aes(x=value,fill=sex,color=sex))+
geom_histogram(aes(y=..density..),
               position="identity",
               alpha=0.5)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

## กราฟการแจกแจงสะสม(empirical cumulative distribution function)

ggplot(data=Sample,  # ช้อมูล Sample
       aes(x=value,color=sex) # แกน x คือ value แยกเพศด้วยการใช้สี
       )+
stat_ecdf() # วาดกราฟการแจกแจงสะสม

สำหรับการดูการแจงการของข้อมูล ถ้าเราสนใจว่าของข้อมูลของเรามีการแจงแจกแบบปกติหรือไม่สามารถใช้ QQ-plot ช่วยในการพิจารณาเบื้องต้นได้ ซึ่งสามารถใช้ ggplot ในการสร้าง QQ-plot ได้ดังนี้

set.seed(10)
 # สุ่มตัวอย่าง 1000 ตัว จากการแจกแจงปกติที่มีค่าเฉลี่ย 5 ความแปรปรวนเท่ากับ 10
Norm <- rnorm(1000,5,10)
# สร้างกรอบข้อมูลชื่อ sample จากเวคเตอร์ Norm
sample <-data.frame(value=Norm) 
ggplot(data=sample,aes(sample=value))+
       stat_qq(color="red")+ # qqplot จุดสีแดง
       stat_qq_line(color="blue",size=1.5) # qqplot เส้นสีฟ้า

set.seed(10)
# สุ่มตัวอย่างจำนวน 1000 ตัวจากการแจกแจงเอกโพเนนเชียล ที่มีค่าพารามิเตอร์เท่ากับ 1
Exp <- rexp(1000,1) 
# สร้างกรอบข้อมูล Random
Random <-data.frame(value=Exp)
# วาด qqplot
ggplot(data=Random, # ข้อมูล Random
            aes(sample=value) # sample คือ value
       )+
stat_qq(distribution = stats::qexp, # การแจกแจง exponential
        color="red") +              # ใช้จุดสีแดง
stat_qq_line(distribution = stats::qexp) # วาดเส้น

บ็อกพล๊อต(box plot)

ggplot(Sample,aes(x=sex,y=value,fill=sex))+
geom_boxplot()

หมายเหตุ กราฟที่เราสร้างขึ้นสามารถเก็บเป็นตัวแปรได้ ถ้าไม่การให้แสดงผลบนหน้าบนหน้าจอ และเป็นไปใช้เพื่อนำไปจัดวางกราฟแบบต่างๆ เข้าด้วยกันต่อไป ซึ่งเป็นการใช้งานขั้นสูงจะไม่ได้กล่าวถึงในหนังสือเล่มนี้ ตัวอย่างการเก็บตัวแปร

p1<- ggplot(Sample,aes(x=sex,y=value,color=sex))+
     geom_boxplot()

ถ้าต้องการให้แสดงผลก็ทำเหมือนที่ผ่านมาดังนี้

p1

ในบทนี้ เป็นตัวอย่างของการ สร้างกราฟด้วย package ggplot2 ที่มีความสวยงามและใช่งานได่้ไม่ยาก ผู้อ่านและผู้สนใจ สามารถนำไปประยุกต์ใช้ ปรับให้เข้ากับปัญหาของผู้อ่านได้อย่างอิสระ ในบทนี้ เพียงแค่นำเสนอเป็นพื้นฐานเบื้องต้นเท่านั้นการสร้างกราฟยังเนื้อหาและรายละเอียดอีกมากจนสามารถเขียนเป็นหนังสือได้อีกเล่มเลยทีเดียว