R มี package สำหรับทำ data visualization ระดับท๊อปของโลกที่ชื่อว่า ggplot2
สร้างได้ตั้งแต่ basic – advanced 2D plots สามารถปรับแต่งหน้าตาของ plot ได้ตามที่เราต้องการ i.e. fully customizable เรามักจะเห็นการใช้งาน ggplot2
ใน academic journal บ่อยๆ รวมถึงพวกนิตยสารและสำนักข่าวระดับโลก

วันนี้เราจะมาลองสร้าง basic plot ง่ายๆด้วยกัน ระดับ beginner level!
เปิด RStudio ขึ้นมาแล้วลอง install ggplot2 ด้วยโค้ดด้านล่าง data frame ที่เราจะใช้ใน tutorial วันนี้ชื่อว่า diamonds
ที่มาพร้อมกับ package ggplot2
# install packages
install.packages("ggplot2")
install.packages("dplyr")
library(ggplot2)
library(dplyr)
# let's look at our dataset
glimpse(diamonds)
head(diamonds)
# small df
small_diamonds <- sample_n(diamonds, size=2000)
เนื่องจาก diamonds
เป็นข้อมูล size ระดับปานกลาง (n=53,940) เราจะสุ่มตัวอย่างออกมาแค่ 2000 records ด้วยฟังชั่น sample_n()
เพื่อให้ง่ายต่อการสร้าง plot i.e. ข้อมูลขนาดเล็กจะสร้าง plot ได้เร็วกว่า
Basic Template
ggplot()
ต้องการ 2 arguments คือ data frame และ mapping
สำหรับ mapping อธิบายง่ายๆคือการเลือก column ใน data frame ที่เราต้องการ map เป็นแกน x และแกน y ในชาร์ท พอเราเลือก columns x และ y ได้แล้วให้เราเขียน + geom_...()
เพื่อเลือกการแสดงผล i.e. geometry ที่เหมาะสมกับคอลั่มที่เราเลือกมาและสร้างเป็น visualization
# ggplot template
ggplot(data, mapping = aes(x = ... , y = ...)) +
geom_...()
code ด้านล่างใช้ฟังชั่น geom_point()
สร้าง scatter plot โดยเรา map x = carat และ y = price คอลั่มจาก data frame small_diamonds
ที่เราเตรียมไว้
ทำไมต้องใช้ scatter plot? เพราะคอลั่ม carat และ price เป็นตัวแปรแบบ numeric ทั้งคู่ กราฟทางสถิติที่เหมาะสมในการแสดงความสัมพันธ์นี้คือ “scatter plot“
# your first ggplot2
ggplot(small_diamonds, aes(x = carat, y = price)) +
geom_point()

จากกราฟจะเห็นได้ว่า carat, price มีความสัมพันธ์เชิงบวก (positive relationship) ถ้าลองรัน correlation ด้วยฟังชั่น cor(diamonds$carat, diamonds$price)
จะพบว่าค่า cor สูงถึง 0.9215
Customization
เราสามารถเปลี่ยนสีของกราฟด้วยการ setting ค่าที่เราต้องการ ลองพิมพ์ help(geom_point)
ใน console เพื่ออ่านคู่มือการใช้งานฟังชั่นนี้ เลื่อนไปที่หัวข้อ Aesthetics จะเห็น list ของ arguments ที่เราสามารถเปลี่ยนได้ ตัวหลักๆที่เราใช้กัน เช่น
- size – ขนาดของ point บน scatter plot
- color – สีของ point เช่น “red”, “blue”, “salmon”, “hotpink”
- alpha – ความจาง (สี) ของ point มีค่าอยู่ระหว่าง [0,1] ค่า alpha ยิ่งต่ำ สีของ point จะยิ่งจางลง
# add color, size and alpha to your plot
ggplot(small_diamonds, aes(x = carat, y = price)) +
geom_point(color = "hotpink", size = 3, alpha = 0.3)

Add Layers
ด้านล่างเราลองเปลี่ยนสี plot เป็น "salmon"
และเพิ่มอีกหนึ่ง layer ด้วยฟังชั่น geom_smooth()
เป็นเส้นสีดำ
# add more layers to the plot
ggplot(small_diamonds, aes(x = carat, y = price)) +
geom_point(color = "salmon", size = 3, alpha = 0.3) +
geom_smooth(method = "loess", se = T, color = "black")

Well done !! You have learned a lot in this post. จุดแข็งที่ทำให้หลายคนเลือกใช้ ggplot2 คือความสามารถในการปรับแต่งหน้าตา plot ของเราอย่างไร้ขีดจำกัด
More Awesome Plots
สำหรับใครที่อยากศึกษาเพิ่มเติม ลองเข้ามาดูที่เว็บไซต์ official ของ ggplot2 ได้ที่นี่ หรือติดตาม tutorial ใหม่ๆของเราได้ที่ทาง FB และ blog นี้

Appendix
ggplot2 มาพร้อมกับ quick function ที่ใช้สร้างกราฟเร็วๆชื่อว่า qplot()
เราสามารถสร้างกราฟแรกในบทความนี้ได้ง่ายๆด้วยโค้ด qplot(x = carat, y = price, data = small_diamonds, geom = "point")
ggplot2 ทำงานได้ดีกับ dplyr (ทั้งสอง package อยู่ในตระกูล tidyverse ของ Hadley Wickham) ใน code chunk แรกของบทความนี้ เราใช้ฟังชั่น sample_n()
ของ dplyr ในการสุ่ม data frame อ่านเพิ่มเติมการทำ data wrangling ได้ที่นี่
Leave a Reply