# เรียกใช้ชุดคำสั่งด้วย
library(ggplot2)
# หรือtidyverse ก็ได้
library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.1 ──
## ✓ tibble  3.1.2     ✓ dplyr   1.0.7
## ✓ tidyr   1.1.3     ✓ stringr 1.4.0
## ✓ readr   1.4.0     ✓ forcats 0.5.1
## ✓ purrr   0.3.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(extrafont)
## Registering fonts with R

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

ลักษณะของกราฟที่เลือกใช้ขึ้นอยู่กับจำนวนมิติหรือจำของตัวแปรที่มี และยังต้องพิจารณาอีกว่าตัวแปรแต่ละตัวนั้นเป็นอย่างไร ดังนี้

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

str(diamonds)
## tibble [53,940 × 10] (S3: tbl_df/tbl/data.frame)
##  $ carat  : num [1:53940] 0.23 0.21 0.23 0.29 0.31 0.24 0.24 0.26 0.22 0.23 ...
##  $ cut    : Ord.factor w/ 5 levels "Fair"<"Good"<..: 5 4 2 4 2 3 3 3 1 3 ...
##  $ color  : Ord.factor w/ 7 levels "D"<"E"<"F"<"G"<..: 2 2 2 6 7 7 6 5 2 5 ...
##  $ clarity: Ord.factor w/ 8 levels "I1"<"SI2"<"SI1"<..: 2 3 5 4 2 6 7 3 4 5 ...
##  $ depth  : num [1:53940] 61.5 59.8 56.9 62.4 63.3 62.8 62.3 61.9 65.1 59.4 ...
##  $ table  : num [1:53940] 55 61 65 58 58 57 57 55 61 61 ...
##  $ price  : int [1:53940] 326 326 327 334 335 336 336 337 337 338 ...
##  $ x      : num [1:53940] 3.95 3.89 4.05 4.2 4.34 3.94 3.95 4.07 3.87 4 ...
##  $ y      : num [1:53940] 3.98 3.84 4.07 4.23 4.35 3.96 3.98 4.11 3.78 4.05 ...
##  $ z      : num [1:53940] 2.43 2.31 2.31 2.63 2.75 2.48 2.47 2.53 2.49 2.39 ...
ข้อมูล diamond มีตัวอย่างทั้งหมด 53,940 ตัวอย่าง แต่ละตัวอย่างมีจำนวนแปร 10 ตัวอยู่

กราฟของข้อมูล 1 ตัวแปร

จะถูกนำเสนอด้วยกราฟแท่ง(ฺBar graph) Histogram และ density graph

กราฟแท่ง

กราฟนี้ จะถูกใช้งานเมื่อต้องการนับจำนวนของค่าที่เหมือนกันสำหรับตัวแปรประเภท chr หรือ factor

# ตัวแปร cut ใน diamonds เป็น ตัวแปรชนิด factor
qplot(data=diamonds,x= cut)

# ตัวแปร clarity ใน diamonds เป็น ตัวแปรชนิด factor
qplot(data=diamonds,x= clarity)

กราฟ histogram และ density

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

# ตัวแปร price ใน diamonds เป็น ตัวแปรชนิด integer
qplot(data=diamonds,x= price)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

สำหรับ กราฟแบบ density จะต้องใช้ตำสั่งภาย qplot เพิ่มอีก คือ geom = “density” ดังนี้

# ตัวแปร price ใน diamonds เป็น ตัวแปรชนิด integer
qplot(data=diamonds,x= price,geom ="density")

ถ้าต้องการให้เป็น กราฟ histogram หรือ density เป็นรูปแบบฟังก์ชันความน่าจะเป็นหนาแน่น (probaiblity density function) นั้นคือพื้นที่ใต้กราฟทั้งหมดจะมีค่าเท่ากับหนึ่ง ต้องเพิ่มชุดคำสั่งดังนี้

คำสั่ง y= ..density.. และ geom = “histogram” สำหรับกราฟแบบ histogram และ คำสั่ง y= ..density.. และ geom = “density” สำหรับกราฟแบบ density

# ตัวแปร price ใน diamonds เป็น ตัวแปรชนิด integer
qplot(data=diamonds,x = price, y = ..density.. ,geom ="histogram")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

qplot(data=diamonds,x = price, y = ..density.. ,geom ="density")

กราฟสำหรับข้อมูล 2 ตัวแปร

กรณีที่ 1 มีตัวแปรเชิงปริมาณ 1 ตัวและตัวแปรเชิงปริมาณ 1 ตัว

กราฟที่แสดงได้ boxplot จะเป็นสำเสนอข้อมูลค่าต่ำสุด ค่าสูงสุด ค่าควอไทร์ที่ 25 50 และ 75 รวมถึงค่า outlier ของตัวข้อมูลที่อยู่ในตัวแปรเชิงคุณภาพ ทั้งหมด เช่น กราฟแบบ boxplot ระหว่าง cut กับ price

 #  ต้องให้ x  เป็นตังแปรเชิงคุณภาพ และ y เป็นตัวแปรเชืงปริมาณ
qplot(data=diamonds,x= cut, y = price,geom = "boxplot")

### กรณีที่ 2 เป็นตัวแปรเชิงปริมาณทั้ง 2 ตัว

กราฟที่ได้คือ กราฟแบบจุด scatter plot) ซึ่งน่าจะเป็นที่รู้จักกันเป็นอย่างดี เช่น

qplot(data=diamonds, x = carat, y = price)

การใส่สี

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

# แสดงสีแต่ละช่องด้วย ตัวแปรเดิม
qplot(data=diamonds,x= cut,fill= cut)

ผลที่ได้ คือ ค่าต่างๆ ของตัวแปร cut จะมีแตกต่างกันไป

# แสดงสีแต่ละช่องด้วยตัวแปร color
qplot(data=diamonds,x= cut,fill= color)

ผลที่ได้ คือ ค่าต่างๆ ของตัวแปร cut จะประกอบไปด้วยจำนวนค่าต่างๆ ของตัวแปร color นั่นเอง จะเห็นได้ว่าข้อมูลได้ถูกแสดงออกมาเป็น 2 ตัวแปร

คำถาม ถ้าให้ fill = price ผลที่ได้จะเป็นอย่างไร การใส่สีหรับกราฟแบบ histogram และ density

# ใส่สีด้วยตัวแปร cut
qplot(data=diamonds,x= price,fill = cut)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

จะเห็นได้ว่าในแต่ละช่วงของราคาประกอบไปด้วย ตัวแปร cut จำนวนประมาณเท่าไหร่

# ใส่สีด้วยตัวแปร cut
qplot(data=diamonds,x= price,fill = cut, geom ="density")

การใช่สี ด้วยตัวแปร cut สำหรับกราฟแบบ density คำสั่ง qplot จะแสดงเป็นกราฟการประมาณค่าฟังก์ชันความน่าจะเป็นหนาแน่น แต่กราฟที่ได้ จะเห็นว่า สีเหลืองได้บดบังกราฟ สีอื่นๆ ไปมาก ดังนั้น ถ้าอยากเห็นกราฟสีือื่นๆ ที่สีเหลืองได้บังไว้ก็ต้องลดความเข้มของสีทั้งหมดลงด้วย คำสั่ง alpha ดังนี้

# alpha มีค่าอยู่ระหว่าง 0 ถึง 1
qplot(data=diamonds,x= price,fill = cut,alpha= 0.5, geom ="density")

จะเห็นกราฟ density ของตัวแปร cut แบบจางๆ ด้วย

สำหรับกราฟแบบ boxplot ก็จะได้คล้ายกับกราฟแท่ง

# ใส่สีโดยใช้ fill = cut
qplot(data=diamonds,x= cut, y = price,fill =cut, geom = "boxplot")

ถ้าให้ fill เท่ากับตัวแปรเชิงคุณภาพอื่นๆ ที่ไม่ใช้ตัวเองจะได้ผลลัพธ์ที่แตกต่างออกไปดังนี้

qplot(data=diamonds,x= cut, y = price,fill =clarity, geom = "boxplot")

นั่นก็คือ ในแต่ตัวแปร cut จะประกอบไปด้วย boxplot ของตัวแปร clarity กับ price นั่นเอง

สำหรับกราฟแบบจุดจะไม่ใช่คำสั่ง fill แต่ใช้คำสัั่ง color แทนดังนี้

# ให้ color เท่ากับตัวแปรเชิงคุณภาพ
qplot(data=diamonds, x = carat, y = price, color = clarity)

# ให้ color เท่ากับตัวแปรเชิงปริมาณ
qplot(data=diamonds, x = carat, y = price, color = depth)

กราฟที่ได้ จะไปใส่สีจากจางไปเข้าเพียงสีเดียว

กราฟแบบจุดนี้สามารถเพิ่มจำนวนแปรเข้าไปได้ จึงถูกเรียกว่า bubble plot

# ให้ size เป็นตัวแปรเชิงปริมาณ คือ table
qplot(data=diamonds, x = carat, y = price, color = clarity, size= table)

ตอนต่อไป จะพูดเรื่องการปรับแต่งกราฟ เช่นการตั้งชื่อโดยใช้ภาษาไทย การทำงานร่วมกับชุดคำสั่ง LaTeX การแบ่งเป็นกราฟย่อยๆ เป็นต้น