วิธีสร้างแผนภูมิอมยิ้มใน 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))

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *