รู้จักกับ ggplot2 แพ็คเกต Data Viz ที่ดีที่สุดของ R

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

FT-world-cup
ตัวอย่างงาน publication ด้วย ggplot2 ของ Financial Times (ที่มา: RA)

วันนี้เราจะมาลองสร้าง 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 นี้

Image result for ggplot2 bbc
ตัวอย่างงาน publication ด้วย ggplot2 ของ BBC (ที่มา: medium)

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