วิธีสร้างแผนภูมิอมยิ้มใน r
เช่นเดียวกับแผนภูมิแท่ง แผนภูมิอมยิ้ม มีประโยชน์ในการเปรียบเทียบค่าเชิงปริมาณของตัวแปรเชิงหมวดหมู่ แทนที่จะใช้แท่ง แผนภูมิอมยิ้มจะใช้เส้นที่มีวงกลมต่อท้ายเพื่อแสดงค่าเชิงปริมาณ
แผนภูมิอมยิ้มเป็นวิธีที่ดีในการเปรียบเทียบหลายหมวดหมู่ในขณะที่ลดปริมาณสีบนแผนภูมิให้เหลือน้อยที่สุด และมุ่งความสนใจของผู้อ่านไปที่ค่าจริงบนแผนภูมิ ตรงข้ามกับเส้นหรือกราฟิกอื่นๆ บนแผนภูมิ หลายคนยังมองว่าบอร์ดอมยิ้มมีความสวยงาม
ในบทช่วยสอนนี้ เราจะอธิบายขั้นตอนที่จำเป็นในการสร้างแผนภูมิอมยิ้มต่อไปนี้:
ตัวอย่าง: แผนภูมิอมยิ้มใน R
สำหรับตัวอย่างนี้ เราจะใช้ชุดข้อมูล R ในตัว mtcars :
#view first six rows of mtcars
head(mtcars)
แผนภูมิอมยิ้มพื้นฐาน
รหัสต่อไปนี้แสดงให้เห็นถึงวิธีการ เพื่อสร้างแผนภูมิอมยิ้มเพื่อเปรียบเทียบ mpg (ไมล์ต่อแกลลอน) ของรถแต่ละคันจาก 32 คันในชุดข้อมูล
ชื่อรถยนต์ถูกกำหนดไว้ในชื่อแถวของชุดข้อมูล ดังนั้นเราจึงสร้างคอลัมน์ใหม่ในชุดข้อมูลที่มีชื่อแถวเหล่านี้ก่อน
ต่อไป เราจะโหลดไลบรารี ggplot2 ซึ่งเราจะใช้เพื่อสร้างแผนภูมิอมยิ้ม
ด้วย ggplot2 เราใช้ geom_segment เพื่อสร้างเส้นบนโครงเรื่อง เราตั้งค่าเริ่มต้นและสิ้นสุด x เป็น 0 และ mpg ตามลำดับ เราตั้งค่าเริ่มต้นและสิ้นสุด y เป็น char :
#create new column for car names mtcars$car <- row.names(mtcars) #load ggplot2 library library(ggplot2) #create lollipop chart ggplot(mtcars, aes(x = mpg, y = car)) + geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) + geom_point()
การเพิ่มป้ายกำกับ
นอกจากนี้เรายังสามารถเพิ่มป้ายกำกับลงในแผนภูมิโดยใช้อาร์กิวเมนต์ label และ geom_text :
ggplot(mtcars, aes(x = mpg, y = car, label = mpg )) + geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) + geom_point() + geom_text(nudge_x = 1.5)
หรือแทนที่จะวางป้ายกำกับที่ท้ายแต่ละบรรทัด เราสามารถวางไว้ในวงกลมได้เองโดยทำให้วงกลมใหญ่ขึ้นและเปลี่ยนสีแบบอักษรของป้ายกำกับเป็นสีขาว:
ggplot(mtcars, aes(x = mpg, y = car, label = mpg)) + geom_segment(aes(x = 0, y = car, xend = mpg, yend = car)) + geom_point( size = 7 ) + geom_text( color = 'white', size = 2 )
เปรียบเทียบค่ากับค่าเฉลี่ย
นอกจากนี้เรายังสามารถใช้แผนภูมิอมยิ้มเพื่อเปรียบเทียบค่ากับตัวเลขที่ระบุได้ ตัวอย่างเช่น เราสามารถหาค่า mpg เฉลี่ยในชุดข้อมูล แล้วเปรียบเทียบ mpg ของรถยนต์แต่ละคันกับค่าเฉลี่ย
รหัสต่อไปนี้ใช้ไลบรารี dplyr เพื่อค้นหาค่า mpg เฉลี่ย จากนั้นจัดเรียงรถยนต์ตามลำดับจากน้อยไปมาก ของ mpg :
#load library dplyr library(dplyr) #find mean value of mpg and arrange cars in order by mpg descending mtcars_new <- mtcars %>% arrange(mpg) %>% mutate(mean_mpg = mean(mpg), flag = ifelse(mpg - mean_mpg > 0, TRUE, FALSE), car = factor(car, levels = .$car)) #view first six rows of mtcars_new head(mtcars_new)
จากนั้นโค้ดต่อไปนี้จะสร้างแผนภูมิอมยิ้มโดยการตั้งค่าสีของวงกลมให้เท่ากับค่า ธง (ในกรณีนี้คือ TRUE หรือ FALSE) และค่า x เริ่มต้นสำหรับรถแต่ละคันให้เท่ากับค่า MPG เฉลี่ย
ggplot(mtcars_new, aes(x = mpg, y = car, color = flag )) + geom_segment(aes( x = mean_mpg , y = car, xend = mpg, yend = car)) + geom_point()
การใช้จานสีประเภทนี้ทำให้เราสามารถระบุได้อย่างง่ายดายว่ารถยนต์คันใดมี MPG ต่ำกว่าและสูงกว่าค่าเฉลี่ยชุดข้อมูล
ตามค่าเริ่มต้น R จะใช้สีน้ำเงินและสีแดงเป็นสีแผนภูมิ อย่างไรก็ตาม เราสามารถใช้สีใดก็ได้ที่เราต้องการโดยใช้อาร์กิวเมนต์ scale_color_manual :
ggplot(mtcars_new, aes(x = mpg, y = car, color = flag)) +
geom_segment(aes(x = mean_mpg, y = car, xend = mpg, yend = car)) +
geom_point() +
scale_color_manual(values = c("purple", "blue"))
เปลี่ยนความสวยงามของแผนภูมิ
สุดท้ายนี้ เราสามารถใช้ความสามารถที่หลากหลายของ ggplot2 เพื่อปรับเปลี่ยนความสวยงามของแผนภูมิเพิ่มเติม และสร้างผลิตภัณฑ์ขั้นสุดท้ายที่ดูเป็นมืออาชีพ:
ggplot(mtcars_new, aes(x = mpg, y = car, color = flag)) + geom_segment(aes(x = mean_mpg, y = car, xend = mpg, yend = car), color = "grey") + geom_point() + annotate("text", x = 27, y = 20, label = "Above Average", color = "#00BFC4", size = 3, hjust = -0.1, vjust = .75) + annotate("text", x = 27, y = 17, label = "Below Average", color = "#F8766D", size = 3, hjust = -0.1, vjust = -.1) + geom_segment(aes(x = 26.5, xend = 26.5, y = 19, yend = 23), arrow = arrow(length = unit(0.2,"cm")), color = "#00BFC4") + geom_segment(aes(x = 26.5, xend = 26.5, y = 18, yend = 14), arrow = arrow(length = unit(0.2,"cm")), color = "#F8766D") + labs(title = "Miles per Gallon by Car") + theme_minimal() + theme(axis.title = element_blank(), panel.grid.minor = element_blank(), legend.position = "none", text = element_text(family = "Georgia"), axis.text.y = element_text(size = 8), plot.title = element_text(size = 20, margin = margin(b = 10), hjust = 0), plot.subtitle = element_text(size = 12, color = "darkslategrey", margin = margin(b = 25, l = -25)), plot.caption = element_text(size = 8, margin = margin(t = 10), color = "grey70", hjust = 0))