การสร้างภาพข้อมูลหรือ Data Visualization ช่วยให้เราเข้าใจชุดข้อมูลที่มีความซับซ้อนได้ง่ายขึ้นและทำให้เราตัดสินใจในการจัดการกับข้อมูลเร็วขึ้น ซึ่ง Data Visualization สามารถทำได้ทั้งก่อนและหลังการวิเคราะห์เชิงสถิติ

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

#load packages
library(ggplot2)
library(psych)
library(Rmisc)

Mtcars data

ใน tutorial นี้เราจะใช้ข้อมูลที่มีอยู่แล้วใน package ggplot2 ชื่อว่า mtcars ในการสร้างกราฟฟิค
หลังจาก import mtcars ลงมาแล้ว เราสามารถเซ็ตค่าตัวแปรได้ตามนี้

data("mtcars")

mtcars$vs <- factor(mtcars$vs, labels = c("V", "S"))
mtcars$am <- factor(mtcars$am, labels = c("automatic", "manual"))
mtcars$cyl  <- as.factor(mtcars$cyl)
mtcars$gear <- as.factor(mtcars$gear)
mtcars$carb <- as.factor(mtcars$carb)

psych::describe(mtcars)
##       vars  n   mean     sd median trimmed    mad   min    max  range  skew kurtosis    se
## mpg      1 32  20.09   6.03  19.20   19.70   5.41 10.40  33.90  23.50  0.61    -0.37  1.07
## cyl*     2 32   2.09   0.89   2.00    2.12   1.48  1.00   3.00   2.00 -0.17    -1.76  0.16
## disp     3 32 230.72 123.94 196.30  222.52 140.48 71.10 472.00 400.90  0.38    -1.21 21.91
## hp       4 32 146.69  68.56 123.00  141.19  77.10 52.00 335.00 283.00  0.73    -0.14 12.12
## drat     5 32   3.60   0.53   3.70    3.58   0.70  2.76   4.93   2.17  0.27    -0.71  0.09
## wt       6 32   3.22   0.98   3.33    3.15   0.77  1.51   5.42   3.91  0.42    -0.02  0.17
## qsec     7 32  17.85   1.79  17.71   17.83   1.42 14.50  22.90   8.40  0.37     0.34  0.32
## vs*      8 32   1.44   0.50   1.00    1.42   0.00  1.00   2.00   1.00  0.24    -2.00  0.09
## am*      9 32   1.41   0.50   1.00    1.38   0.00  1.00   2.00   1.00  0.36    -1.92  0.09
## gear*   10 32   1.69   0.74   2.00    1.62   1.48  1.00   3.00   2.00  0.53    -1.07  0.13
## carb*   11 32   2.72   1.37   2.00    2.65   1.48  1.00   6.00   5.00  0.35    -0.95  0.24

โดยข้อมูลประกอบไปด้วย
mpg - จำนวนแกลลอนของน้ำต่อ 1 ไมล์
cyl - จำนวนกระบอกสูบ
disp - ความจุของเครื่องยนต์ (ลูกบาศก์นิ้ว)
hp - แรงม้า
drat - สัดส่วนของเพลากลางของรถ
wt - น้ำหนัก
qsec - ความเร่ง
vs - รูปร่างของเครื่องยนต์ ‘V’ หรือ ‘S’
am - ระบบเกียร์อัตโนมัติ (auto) หรือ เกียร์กระปุก (manual)
gear - จำนวนเกียร์
carb - จำนวนตัวเผาไหม้เครื่องยนต์

Ggplot2 Package

Ggplot2 เป็น package ในรูปแบบของ Grammar of Graphic ที่ความยืดหยุ่น ซึ่งในการเขียนคำสั่งของ ggplot2 นั้น จะมีลักษณะเป็นการเรียงคำสั่งในแต่ละขั้น
โดยปกติแล้ว คำสั่งที่ใช้งานพื้นฐานจะประกอบไปด้วย

  • data - การเรียกข้อมูลที่ใช้งาน

  • aesthetic mappings - การเลือกตัวแปรที่จะปรากฎอยู่ในกราฟ

  • geometric objects - การเลือกวิธีการสร้างกราฟฟิค

  • Customizing เช่น การใส่ชื่อ เลือกธีม หรือลงสีให้กราฟ

นอกจากนี้ยังมีคำสั่งอื่น ๆ ที่มีความซับซ้อนมากขึ้น หากเราเริ่มคุ้นเคยกับคำสั่งพื้นฐานแล้ว เราสามารถศึกษาเพิ่มเติมให้กราฟฟิคมีความสวยงามและตรงตามความต้องการของเรามากขึ้นได้

การสร้างกราฟ

ก่อนที่เราจะสร้างกราฟ เราควรสังเกตตัวแปรที่เราต้องการนำมาสร้างว่าเป็นตัวแปรลักษณะใด โดยสามารถใช้คำสั่ง str()

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 : Factor w/ 3 levels "4","6","8": 2 2 1 2 3 2 3 1 1 2 ...
##  $ 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  : Factor w/ 2 levels "V","S": 1 1 2 2 1 2 1 2 2 2 ...
##  $ am  : Factor w/ 2 levels "automatic","manual": 2 2 2 1 1 1 1 1 1 1 ...
##  $ gear: Factor w/ 3 levels "3","4","5": 2 2 2 1 1 1 1 2 2 2 ...
##  $ carb: Factor w/ 6 levels "1","2","3","4",..: 4 4 1 1 2 1 4 2 2 4 ...

หลักการในการสร้างกราฟฟิคคือ การสังเกตจำนวนตัวแปรและลักษณะของตัวแปรในแกน x และ y โดยลักษณะของตัวแปรนี้จะเป็นการคัดรูปแบบกราฟของเรา
ใน tutorial นี้เราจะเรียนรู้สร้าง boxplot, bar graph และ line graph ค่ะ

การสร้าง boxplot

ในการสร้าง boxplot (หรือกราฟลักษณะอื่น ๆ) เราจะเริ่มกันที่การสร้างคำสั่งพื้นฐาน คือ data และ aesthetic mappings
โดยคำสั่งทั่วไปคือ ggplot(data = ชื่อไฟล์, aes(x = ตัวแปรแกน x, y = ตัวแปรแกน y)

คำสั่ง aes() สามารถเซ็ตค่าอื่น ๆ ได้ เช่น

  • ตำแหน่งของตัวแปร (x = และ y = )

  • สี: โดย color= เป็นสีเส้นขอบ และ fill= เป็นสีด้านใน

  • shape = รูปร่างของจุดข้อมูล และ size =ขนาดของจุดข้อมูล

ggplot(data = mtcars, aes(x = am, y = mpg))

ถ้าเรา run คำสั่งข้างต้น เราจะพบว่า กราฟฟิคมีเพียง background (หรือ coordinate system) และชื่อตัวแปรของเราเท่านั้น ดังนั้นเราจึงจำเป็นต้องเขียนคำสั่งว่าเราต้องการให้กราฟออกมาเป็นรูปแบบใด (สามารถเข้าไปดูรูปแบบทั้งหมดได้ที่ help.search("geom_", package = "ggplot2")

สำหรับการสร้าง boxplot เราจะใช้คำสั่ง geom_boxplot() เพื่อเซ็ตค่า geometric objects

ggplot(data = mtcars, aes(x = am, y = mpg)) +
  geom_boxplot()

จะเห็นว่ากราฟ boxplot ที่สร้างขึ้นมามีเพียงตัวแปร x และ y หากเราต้องการจัดกลุ่มตัวแปร เราสามารถใช้คำสั่ง fill = ตัวแปรจัดกลุ่ม ใน aesthetic mapping เพื่อให้มีการจัดกลุ่มของตัวแปรในกราฟ

ggplot(data = mtcars, aes(x = am, y = mpg, fill = vs)) +
  geom_boxplot()

หากเราต้องการให้กราฟมีสีสันและชื่อแกนตามที่เราต้องการ เราสามารถเขียนคำสั่งต่อจาก คำสั่ง geometric ได้

ตัวอย่างคำสั่งอื่น ๆ ในการปรับแต่งกราฟ

  • เพิ่มลักษณะกราฟฟิค:

    • หากเราอยากให้ ggplot2 สร้างจุดข้อมูลในกราฟของเรา เราสามารถสั่งคำสั่ง geom_jitter() หลังจาก geometric objects หลักของเราได้
  • ตกแต่งกราฟ:

    • ใช้คำสั่ง alpha = ค่าโปรงใส เพื่อเพิ่มความโปร่งใสของกราฟ

    • ใช้คำสั่ง width = ค่าความกว้างของกราฟ ในการกำหนดความกว้างของกราฟ

  • เพิ่มชื่อ:

    • แกน x และ y: ใช้คำสั่ง xlab = "ชื่อแกน x" และ ylab = "ชื่อแกน y"

    • ชื่อหัวกราฟ: ใช้คำสั่ง ggtitle("ชื่อหัวกราฟ")

  • เลือกใช้ theme:

    • ธีมของกราฟ: ใช้คำสั่ง theme_ ในการเลือกใช้ theme โดย คำสั่ง theme_classic จะใกล้เคียงกับ APA

    • สีของกราฟ:

      • เลือกจาก palette ที่มีชุดคำสั่งสี

        • สีเส้นขอบ: scale_color_brewer(palette = "ชื่อ palette ที่ต้องการ")

        • สีช่องในกล่องหรือคอลัมน์: scale_fill_brewer(palette = "ชื่อ palette ที่ต้องการ")

      • เลือกสีเอง

        • สีเส้นขอบ: scale_color_manual(values=c("สีที่1", "สีที่2", "สีที่3"))

        • สีช่องในกลุ่มหรือคอลัมน์: scale_fill_manual(values=c("สีที่1", "สีที่2", "สีที่3"))

Note: หากเลือกสีเอง จำนวนสีต้องเท่ากับจำนวนกลุ่มตัวแปรที่ต้องการจะให้มีสี

ggplot(data = mtcars, aes(x = am, y = mpg, fill = vs)) +
  geom_boxplot(alpha = 0.7, width = 0.6) +
  geom_jitter(alpha = 0.2, size = 2) +
  xlab("Types of Gear transmissions") +
  ylab("Miles per Gallon") +
  ggtitle("Motor Trend Car Road Tests") +
  theme_classic() +
  scale_color_brewer(palette="Accent") +
  scale_fill_brewer(palette="Accent")

จะเห็นได้ว่าสีของกล่องข้อมูลเปลี่ยนไปตามที่เราตั้งค่าไว้ และมีการแสดงของจุดข้อมูลที่มาจากชุดคำสั่ง geom_jitter() โดยมีความโปร่งใสของจุดข้อมูลให้เห็นในกราฟ

การสร้าง Bar Graph

การสร้าง Bar Graph เหมาะสมกับตัวแปรต้นที่มีลักษณะเป็นกลุ่ม (discrete variable) ดังนั้นโครงสร้างของชุดคำสั่งจะคล้ายคลึงกับการสร้าง boxplot

เราสามารถสร้าง bar graph ได้ 2 วิธีคือ

  • geom_bar() จะมีคำสั่งพื้นฐานโดยมีความสูงของกราฟจากสัดส่วนของ n ในข้อมูล

  • geom_col() จะมีคำสั่งพื้นฐานโดยมีความสูงของกราฟเป็นค่าของข้อมูลนั้น ๆ คำสั่งนี้จะเหมาะสมกับข้อมูลที่ผ่านการหาค่าสถิติเชิงพรรณามาแล้ว (เช่นค่า n, mean, sd, se) และนำไปใช้งานได้สะดวกกว่าเมื่อต้องการสร้าง error_bar

ดังนั้น หากต้องการสร้าง bar graph อย่างง่าย เราสามารถใช้คำสั่ง geom_bar() ได้ โดยเพิ่มคำสั่ง stat = "summary" เมื่อต้องการค่าเฉลี่ย (mean) หรือ stat = "identity" เมื่อต้องการค่าผลรวม (sum)

นอกจากนี้แล้ว การสร้าง bar graph ยังสามารถเลือกการวางตัวของกราฟได้ โดยใช้คำสั่ง position =โดยค่าพื้นฐานของ geom_bar() คือ position = "stack" โดยจะเป็นการต่อกันของข้อมูลในแต่ละกลุ่ม ถ้าต้องการให้กราฟอยู่แยกกัน เราจะใช้คำสั่ง position = "dodge" หรือ position = position_dodge(ค่าความห่าง)

# x axis is am
#  stack
stack <- ggplot(data = mtcars, aes(x = am, y = mpg, fill = vs)) +
         geom_bar(stat = "summary") +
         ggtitle("stack") +
         theme_classic()
#  dodge
dodge <- ggplot(data = mtcars, aes(x = am, y = mpg, fill = vs)) +
         geom_bar(stat = "summary", position = position_dodge(0.9)) +
         ggtitle("dodge") +
         theme_classic()
#x axis is vs
#  stack
stack2 <- ggplot(data = mtcars, aes(x = vs, y = mpg, fill = am)) +
         geom_bar(stat = "summary") +
         ggtitle("stack") +
         theme_classic()
#  dodge
dodge2 <- ggplot(data = mtcars, aes(x = vs, y = mpg, fill = am)) +
         geom_bar(stat = "summary", position = position_dodge(0.9)) +
         ggtitle("dodge") +
         theme_classic()

describeBy(mpg ~ am * vs, data = mtcars)
## 
##  Descriptive statistics by group 
## am: automatic
## vs: V
##     vars  n  mean   sd median trimmed mad  min  max range  skew kurtosis  se
## mpg    1 12 15.05 2.77   15.2    15.1 2.3 10.4 19.2   8.8 -0.28    -0.96 0.8
## -------------------------------------------------------------------------------- 
## am: manual
## vs: V
##     vars n  mean   sd median trimmed  mad min max range skew kurtosis   se
## mpg    1 6 19.75 4.01  20.35   19.75 3.85  15  26    11 0.21    -1.53 1.64
## -------------------------------------------------------------------------------- 
## am: automatic
## vs: S
##     vars n  mean   sd median trimmed  mad  min  max range skew kurtosis   se
## mpg    1 7 20.74 2.47   21.4   20.74 3.26 17.8 24.4   6.6  0.1    -1.75 0.93
## -------------------------------------------------------------------------------- 
## am: manual
## vs: S
##     vars n  mean   sd median trimmed mad  min  max range  skew kurtosis  se
## mpg    1 7 28.37 4.76   30.4   28.37 4.6 21.4 33.9  12.5 -0.35    -1.73 1.8

การสร้างกราฟที่มี Error Bar

ในการสร้างกราฟแบบ bar graph และ line graph เราสามารถที่จะแสดงผลความคลาดเคลื่อนข้อมูลโดยเพิ่มคำสั่ง geom_errorbar() โดยเราสามารถหาค่า sd, se, หรือ ci จากข้อมูลที่เรามีก่อนการสร้าง Error Bar โดยใช้คำสั่ง summarySE() จาก package Rmiscโดยใช้คำสั่ง

summarySE(ชื่อไฟล์, measurevar = "ชื่อตัวแปรที่ต้องการหาค่ามาตรฐาน", groupvars = c("ชื่อกลุ่ม 1", "ชื่อกลุ่ม 2"))

library(Rmisc)

sum <- summarySE(mtcars, measurevar="mpg", groupvars=c("am","vs"))
sum
##          am vs  N      mpg       sd        se       ci
## 1 automatic  V 12 15.05000 2.774396 0.8008991 1.762767
## 2 automatic  S  7 20.74286 2.471071 0.9339769 2.285359
## 3    manual  V  6 19.75000 4.008865 1.6366124 4.207046
## 4    manual  S  7 28.37143 4.757701 1.7982418 4.400139

เมื่อได้ค่าความคลาดเคลื่อนออกมาแล้ว เราจะสร้างกราฟจาก object ที่มาจาก summarySE() นี้

โดยในการสร้าง line graph เราจะใช้คำสั่ง geom_point() และ geom_line() โดย geom_point() จะเป็นการกำหนดให้กราฟมีจุดที่เป็นค่า mean และ geom_line()จะเป็นการใส่เส้นกราฟ ซึ่งเราสามารถเซ็ตให้กราฟมีการแยกกลุ่มตามที่เรากำหนดโดยใส่ aes(group = ตัวแปรจัดกลุ่ม)

จากนั้น เพิ่มคำสั่ง geom_errorbar() ในการสร้าง error bar โดยใช้คำสั่ง aes(ymin = ชื่อตัวแปรค่า mean - ci, ymax = ชื่อตัวแปรค่า mean + ci) (Note: เราสามารถใช้ค่า sd หรือ se ในการสร้าง error bar ได้โดยการเปลี่ยน ci เป็น sd หรือ se)

หากกราฟที่ปรากฎออกมามีค่าแกน x และ y ที่ไม่สมดุล เราสามารถใช้คำสั่ง xlim() หรือ ylim() เพื่อปรับแก้สเกลให้เหมาะสมได้

#only plot
line.plot <- ggplot(sum, aes(x = am, y = mpg, color = vs)) +
             geom_point(position = position_dodge(.2)) +
             geom_line(aes(group = vs), position = position_dodge(.2)) +
             ylim(5, 35) +
             ggtitle("Line Plot without Error Bar") +
             theme_classic() +
             scale_color_brewer(palette="Accent")

#with error

line.error <- ggplot(sum, aes(x = am, y = mpg, color = vs)) +
             geom_point(position = position_dodge(.2)) +
             geom_line(aes(group = vs), position = position_dodge(.2)) +
             geom_errorbar(aes(ymin=mpg-ci, ymax=mpg+ci), width=.2, 
                           position=position_dodge(.2)) +
             ylim(5, 35) +
             ggtitle("Line Plot with Error Bar") +
             theme_classic() +
             scale_color_brewer(palette="Accent")

นอกจากนี้ การสร้าง error bar ด้วยคำสั่ง geom_errorbar() ยังสามารถนำไปประยุกต์กับ bar graph ได้เช่นกัน แต่ในกรณีรการสร้าง bar graph จากข้อมูลที่หาค่าสถิติจากคำสั่ง summarySE() มาแล้วนั้น สังเกตว่าจะมีค่า mean เฉลี่ยแต่ละกลุ่ม (และค่าความคลาดเคลื่อนอื่น ๆ) เท่านั้น ดังนั้นในกรณีนี้เราจะใช้คำสั่ง geom_col() ในการสร้าง bar graph

bar.error <- ggplot(sum, aes(x = am, y = mpg, color = vs)) + 
             geom_col(aes(fill = vs), alpha = .5, position = position_dodge(.9)) +
             geom_errorbar(aes(ymin=mpg-ci, ymax=mpg+ci), width = .3, 
                           position = position_dodge(.9)) + 
             theme_classic() +
             scale_color_manual(values=c("#999999", "#E69F00", "#56B4E9")) +
             scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))

bar.error

การสร้างกราฟรูปแบบอื่น ๆ

นอกจาก boxplot, Bar Graph และ Line Graph แล้ว package Ggplot2 ยังช่วยเราในการสร้างกราฟอื่น ๆ ได้ เช่น กราฟที่มีตัวแปรเป็นตัวแปรต่อเนื่อง (continuous variable) เราสามารถใช้คำสั่ง geom_point() ในการสร้างจุดข้อมูล และ geom_smooth() ในการหาเส้นตรงที่เหมาะสมระหว่างข้อมูลทั้งสองตัวแปร โดยเพิ่มคำสั่ง geom_smooth(method = lm)

con.point <- ggplot(mtcars, aes(x = hp, y = mpg, color = hp)) + 
             geom_point(aes(color = hp)) +
             geom_smooth(method = lm, color = "darkblue") +
             theme_classic()

con.point

เรายังสามารถสร้างข้อมูลเชิงเส้นโดยการใช้คำสั่ง geom_line() และ geom_jitter() ในการสร้างกราฟเส้น

con.line <- ggplot(mtcars, aes(x = hp, y = mpg, group = vs)) + 
             geom_line(color = "blue3", position = position_dodge(.9)) +
             geom_jitter(aes(color = vs), alpha = 0.6, size = 3) +
             theme_classic()

con.line

การปรับแต่งสีในกราฟ

เราสามารถเลือกปรับแต่งกราฟได้โดยการใช้คำสั่ง theme_ และการใส่สีของกราฟ
ทั้ง R และ Ggplot2 มีระบบสีที่ช่วยให้เราเลือกสี 2 วิธี คือ 1. เราสามารถใส่ชื่อสีที่เราต้องการได้โดยเรียกดูชื่อสีในคำสั่ง colors() ซึ่งเป็นคำสั่งจาก Base R หรือ 2. คำสั่ง display.brewer.all()จาก package RColorBrewer

colors()
##   [1] "white"                "aliceblue"            "antiquewhite"         "antiquewhite1"       
##   [5] "antiquewhite2"        "antiquewhite3"        "antiquewhite4"        "aquamarine"          
##   [9] "aquamarine1"          "aquamarine2"          "aquamarine3"          "aquamarine4"         
##  [13] "azure"                "azure1"               "azure2"               "azure3"              
##  [17] "azure4"               "beige"                "bisque"               "bisque1"             
##  [21] "bisque2"              "bisque3"              "bisque4"              "black"               
##  [25] "blanchedalmond"       "blue"                 "blue1"                "blue2"               
##  [29] "blue3"                "blue4"                "blueviolet"           "brown"               
##  [33] "brown1"               "brown2"               "brown3"               "brown4"              
##  [37] "burlywood"            "burlywood1"           "burlywood2"           "burlywood3"          
##  [41] "burlywood4"           "cadetblue"            "cadetblue1"           "cadetblue2"          
##  [45] "cadetblue3"           "cadetblue4"           "chartreuse"           "chartreuse1"         
##  [49] "chartreuse2"          "chartreuse3"          "chartreuse4"          "chocolate"           
##  [53] "chocolate1"           "chocolate2"           "chocolate3"           "chocolate4"          
##  [57] "coral"                "coral1"               "coral2"               "coral3"              
##  [61] "coral4"               "cornflowerblue"       "cornsilk"             "cornsilk1"           
##  [65] "cornsilk2"            "cornsilk3"            "cornsilk4"            "cyan"                
##  [69] "cyan1"                "cyan2"                "cyan3"                "cyan4"               
##  [73] "darkblue"             "darkcyan"             "darkgoldenrod"        "darkgoldenrod1"      
##  [77] "darkgoldenrod2"       "darkgoldenrod3"       "darkgoldenrod4"       "darkgray"            
##  [81] "darkgreen"            "darkgrey"             "darkkhaki"            "darkmagenta"         
##  [85] "darkolivegreen"       "darkolivegreen1"      "darkolivegreen2"      "darkolivegreen3"     
##  [89] "darkolivegreen4"      "darkorange"           "darkorange1"          "darkorange2"         
##  [93] "darkorange3"          "darkorange4"          "darkorchid"           "darkorchid1"         
##  [97] "darkorchid2"          "darkorchid3"          "darkorchid4"          "darkred"             
## [101] "darksalmon"           "darkseagreen"         "darkseagreen1"        "darkseagreen2"       
## [105] "darkseagreen3"        "darkseagreen4"        "darkslateblue"        "darkslategray"       
## [109] "darkslategray1"       "darkslategray2"       "darkslategray3"       "darkslategray4"      
## [113] "darkslategrey"        "darkturquoise"        "darkviolet"           "deeppink"            
## [117] "deeppink1"            "deeppink2"            "deeppink3"            "deeppink4"           
## [121] "deepskyblue"          "deepskyblue1"         "deepskyblue2"         "deepskyblue3"        
## [125] "deepskyblue4"         "dimgray"              "dimgrey"              "dodgerblue"          
## [129] "dodgerblue1"          "dodgerblue2"          "dodgerblue3"          "dodgerblue4"         
## [133] "firebrick"            "firebrick1"           "firebrick2"           "firebrick3"          
## [137] "firebrick4"           "floralwhite"          "forestgreen"          "gainsboro"           
## [141] "ghostwhite"           "gold"                 "gold1"                "gold2"               
## [145] "gold3"                "gold4"                "goldenrod"            "goldenrod1"          
## [149] "goldenrod2"           "goldenrod3"           "goldenrod4"           "gray"                
## [153] "gray0"                "gray1"                "gray2"                "gray3"               
## [157] "gray4"                "gray5"                "gray6"                "gray7"               
## [161] "gray8"                "gray9"                "gray10"               "gray11"              
## [165] "gray12"               "gray13"               "gray14"               "gray15"              
## [169] "gray16"               "gray17"               "gray18"               "gray19"              
## [173] "gray20"               "gray21"               "gray22"               "gray23"              
## [177] "gray24"               "gray25"               "gray26"               "gray27"              
## [181] "gray28"               "gray29"               "gray30"               "gray31"              
## [185] "gray32"               "gray33"               "gray34"               "gray35"              
## [189] "gray36"               "gray37"               "gray38"               "gray39"              
## [193] "gray40"               "gray41"               "gray42"               "gray43"              
## [197] "gray44"               "gray45"               "gray46"               "gray47"              
## [201] "gray48"               "gray49"               "gray50"               "gray51"              
## [205] "gray52"               "gray53"               "gray54"               "gray55"              
## [209] "gray56"               "gray57"               "gray58"               "gray59"              
## [213] "gray60"               "gray61"               "gray62"               "gray63"              
## [217] "gray64"               "gray65"               "gray66"               "gray67"              
## [221] "gray68"               "gray69"               "gray70"               "gray71"              
## [225] "gray72"               "gray73"               "gray74"               "gray75"              
## [229] "gray76"               "gray77"               "gray78"               "gray79"              
## [233] "gray80"               "gray81"               "gray82"               "gray83"              
## [237] "gray84"               "gray85"               "gray86"               "gray87"              
## [241] "gray88"               "gray89"               "gray90"               "gray91"              
## [245] "gray92"               "gray93"               "gray94"               "gray95"              
## [249] "gray96"               "gray97"               "gray98"               "gray99"              
## [253] "gray100"              "green"                "green1"               "green2"              
## [257] "green3"               "green4"               "greenyellow"          "grey"                
## [261] "grey0"                "grey1"                "grey2"                "grey3"               
## [265] "grey4"                "grey5"                "grey6"                "grey7"               
## [269] "grey8"                "grey9"                "grey10"               "grey11"              
## [273] "grey12"               "grey13"               "grey14"               "grey15"              
## [277] "grey16"               "grey17"               "grey18"               "grey19"              
## [281] "grey20"               "grey21"               "grey22"               "grey23"              
## [285] "grey24"               "grey25"               "grey26"               "grey27"              
## [289] "grey28"               "grey29"               "grey30"               "grey31"              
## [293] "grey32"               "grey33"               "grey34"               "grey35"              
## [297] "grey36"               "grey37"               "grey38"               "grey39"              
## [301] "grey40"               "grey41"               "grey42"               "grey43"              
## [305] "grey44"               "grey45"               "grey46"               "grey47"              
## [309] "grey48"               "grey49"               "grey50"               "grey51"              
## [313] "grey52"               "grey53"               "grey54"               "grey55"              
## [317] "grey56"               "grey57"               "grey58"               "grey59"              
## [321] "grey60"               "grey61"               "grey62"               "grey63"              
## [325] "grey64"               "grey65"               "grey66"               "grey67"              
## [329] "grey68"               "grey69"               "grey70"               "grey71"              
## [333] "grey72"               "grey73"               "grey74"               "grey75"              
## [337] "grey76"               "grey77"               "grey78"               "grey79"              
## [341] "grey80"               "grey81"               "grey82"               "grey83"              
## [345] "grey84"               "grey85"               "grey86"               "grey87"              
## [349] "grey88"               "grey89"               "grey90"               "grey91"              
## [353] "grey92"               "grey93"               "grey94"               "grey95"              
## [357] "grey96"               "grey97"               "grey98"               "grey99"              
## [361] "grey100"              "honeydew"             "honeydew1"            "honeydew2"           
## [365] "honeydew3"            "honeydew4"            "hotpink"              "hotpink1"            
## [369] "hotpink2"             "hotpink3"             "hotpink4"             "indianred"           
## [373] "indianred1"           "indianred2"           "indianred3"           "indianred4"          
## [377] "ivory"                "ivory1"               "ivory2"               "ivory3"              
## [381] "ivory4"               "khaki"                "khaki1"               "khaki2"              
## [385] "khaki3"               "khaki4"               "lavender"             "lavenderblush"       
## [389] "lavenderblush1"       "lavenderblush2"       "lavenderblush3"       "lavenderblush4"      
## [393] "lawngreen"            "lemonchiffon"         "lemonchiffon1"        "lemonchiffon2"       
## [397] "lemonchiffon3"        "lemonchiffon4"        "lightblue"            "lightblue1"          
## [401] "lightblue2"           "lightblue3"           "lightblue4"           "lightcoral"          
## [405] "lightcyan"            "lightcyan1"           "lightcyan2"           "lightcyan3"          
## [409] "lightcyan4"           "lightgoldenrod"       "lightgoldenrod1"      "lightgoldenrod2"     
## [413] "lightgoldenrod3"      "lightgoldenrod4"      "lightgoldenrodyellow" "lightgray"           
## [417] "lightgreen"           "lightgrey"            "lightpink"            "lightpink1"          
## [421] "lightpink2"           "lightpink3"           "lightpink4"           "lightsalmon"         
## [425] "lightsalmon1"         "lightsalmon2"         "lightsalmon3"         "lightsalmon4"        
## [429] "lightseagreen"        "lightskyblue"         "lightskyblue1"        "lightskyblue2"       
## [433] "lightskyblue3"        "lightskyblue4"        "lightslateblue"       "lightslategray"      
## [437] "lightslategrey"       "lightsteelblue"       "lightsteelblue1"      "lightsteelblue2"     
## [441] "lightsteelblue3"      "lightsteelblue4"      "lightyellow"          "lightyellow1"        
## [445] "lightyellow2"         "lightyellow3"         "lightyellow4"         "limegreen"           
## [449] "linen"                "magenta"              "magenta1"             "magenta2"            
## [453] "magenta3"             "magenta4"             "maroon"               "maroon1"             
## [457] "maroon2"              "maroon3"              "maroon4"              "mediumaquamarine"    
## [461] "mediumblue"           "mediumorchid"         "mediumorchid1"        "mediumorchid2"       
## [465] "mediumorchid3"        "mediumorchid4"        "mediumpurple"         "mediumpurple1"       
## [469] "mediumpurple2"        "mediumpurple3"        "mediumpurple4"        "mediumseagreen"      
## [473] "mediumslateblue"      "mediumspringgreen"    "mediumturquoise"      "mediumvioletred"     
## [477] "midnightblue"         "mintcream"            "mistyrose"            "mistyrose1"          
## [481] "mistyrose2"           "mistyrose3"           "mistyrose4"           "moccasin"            
## [485] "navajowhite"          "navajowhite1"         "navajowhite2"         "navajowhite3"        
## [489] "navajowhite4"         "navy"                 "navyblue"             "oldlace"             
## [493] "olivedrab"            "olivedrab1"           "olivedrab2"           "olivedrab3"          
## [497] "olivedrab4"           "orange"               "orange1"              "orange2"             
## [501] "orange3"              "orange4"              "orangered"            "orangered1"          
## [505] "orangered2"           "orangered3"           "orangered4"           "orchid"              
## [509] "orchid1"              "orchid2"              "orchid3"              "orchid4"             
## [513] "palegoldenrod"        "palegreen"            "palegreen1"           "palegreen2"          
## [517] "palegreen3"           "palegreen4"           "paleturquoise"        "paleturquoise1"      
## [521] "paleturquoise2"       "paleturquoise3"       "paleturquoise4"       "palevioletred"       
## [525] "palevioletred1"       "palevioletred2"       "palevioletred3"       "palevioletred4"      
## [529] "papayawhip"           "peachpuff"            "peachpuff1"           "peachpuff2"          
## [533] "peachpuff3"           "peachpuff4"           "peru"                 "pink"                
## [537] "pink1"                "pink2"                "pink3"                "pink4"               
## [541] "plum"                 "plum1"                "plum2"                "plum3"               
## [545] "plum4"                "powderblue"           "purple"               "purple1"             
## [549] "purple2"              "purple3"              "purple4"              "red"                 
## [553] "red1"                 "red2"                 "red3"                 "red4"                
## [557] "rosybrown"            "rosybrown1"           "rosybrown2"           "rosybrown3"          
## [561] "rosybrown4"           "royalblue"            "royalblue1"           "royalblue2"          
## [565] "royalblue3"           "royalblue4"           "saddlebrown"          "salmon"              
## [569] "salmon1"              "salmon2"              "salmon3"              "salmon4"             
## [573] "sandybrown"           "seagreen"             "seagreen1"            "seagreen2"           
## [577] "seagreen3"            "seagreen4"            "seashell"             "seashell1"           
## [581] "seashell2"            "seashell3"            "seashell4"            "sienna"              
## [585] "sienna1"              "sienna2"              "sienna3"              "sienna4"             
## [589] "skyblue"              "skyblue1"             "skyblue2"             "skyblue3"            
## [593] "skyblue4"             "slateblue"            "slateblue1"           "slateblue2"          
## [597] "slateblue3"           "slateblue4"           "slategray"            "slategray1"          
## [601] "slategray2"           "slategray3"           "slategray4"           "slategrey"           
## [605] "snow"                 "snow1"                "snow2"                "snow3"               
## [609] "snow4"                "springgreen"          "springgreen1"         "springgreen2"        
## [613] "springgreen3"         "springgreen4"         "steelblue"            "steelblue1"          
## [617] "steelblue2"           "steelblue3"           "steelblue4"           "tan"                 
## [621] "tan1"                 "tan2"                 "tan3"                 "tan4"                
## [625] "thistle"              "thistle1"             "thistle2"             "thistle3"            
## [629] "thistle4"             "tomato"               "tomato1"              "tomato2"             
## [633] "tomato3"              "tomato4"              "turquoise"            "turquoise1"          
## [637] "turquoise2"           "turquoise3"           "turquoise4"           "violet"              
## [641] "violetred"            "violetred1"           "violetred2"           "violetred3"          
## [645] "violetred4"           "wheat"                "wheat1"               "wheat2"              
## [649] "wheat3"               "wheat4"               "whitesmoke"           "yellow"              
## [653] "yellow1"              "yellow2"              "yellow3"              "yellow4"             
## [657] "yellowgreen"
RColorBrewer::display.brewer.all()

 

Copyright © 2022 Kris Ariyabuddhiphongs