แก้ไขลำดับของแง่มุมใน ggplot


97

ข้อมูล:

df <- data.frame(
    type   = c("T", "F", "P", "T", "F", "P", "T", "F", "P", "T", "F", "P"), 
    size   = c("50%", "50%", "50%", "100%", "100%", "100%", "150%", "150%", "150%", "200%", "200%", "200%"),
    amount = c(48.4, 48.1, 46.8, 25.9, 26, 24.9, 21.1, 21.4, 20.1, 20.8, 21.5, 16.5)
)

ฉันต้องการพล็อตกราฟแท่งของข้อมูลข้างต้นโดยใช้ ggplot (แกน x -> type, แกน y -> amount, จัดกลุ่มตามsize) เมื่อฉันใช้รหัสต่อไปนี้ฉันไม่ได้รับตัวแปรtypeและตามsizeลำดับที่แสดงในข้อมูล โปรดดูรูป ฉันใช้รหัสต่อไปนี้สำหรับสิ่งนั้น

 ggplot(df, aes(type, amount , fill=type, group=type, shape=type, facets=size)) + 
  geom_bar(width=0.5, position = position_dodge(width=0.6)) + 
  facet_grid(.~size) + 
  theme_bw() + 
  scale_fill_manual(values = c("darkblue","steelblue1","steelblue4"), 
                    labels = c("T", "F", "P"))

ป้อนคำอธิบายภาพที่นี่ .

สำหรับการแก้ไขปัญหาการสั่งซื้อฉันได้ใช้วิธีการแยกตัวประกอบสำหรับตัวแปร "type" โดยใช้สิ่งต่อไปนี้ โปรดดูรูปด้วย

temp$new = factor(temp$type, levels=c("T","F","P"), labels=c("T","F","P")) 

ป้อนคำอธิบายภาพที่นี่

sizeแต่ตอนนี้ผมไม่ทราบวิธีการแก้ไขคำสั่งซื้อสำหรับตัวแปร ควรเป็น 50%, 100% 150% และ 200%

คำตอบ:


148

ทำให้ขนาดของคุณเป็นปัจจัยสำคัญในดาต้าเฟรมของคุณโดย:

temp$size_f = factor(temp$size, levels=c('50%','100%','150%','200%'))

แล้วเปลี่ยนfacet_grid(.~size)ไปfacet_grid(.~size_f)

จากนั้นพล็อต: ป้อนคำอธิบายภาพที่นี่

ขณะนี้กราฟอยู่ในลำดับที่ถูกต้อง


7

นี่คือโซลูชันที่ช่วยให้สิ่งต่างๆอยู่ในห่วงโซ่ท่อ dplyr คุณจัดเรียงข้อมูลล่วงหน้าจากนั้นใช้ mutate_at เพื่อแปลงเป็นปัจจัย ฉันได้แก้ไขข้อมูลเล็กน้อยเพื่อแสดงให้เห็นว่าโซลูชันนี้สามารถนำไปใช้โดยทั่วไปได้อย่างไรโดยให้ข้อมูลที่สามารถจัดเรียงได้อย่างสมเหตุสมผล:

# the data
temp <- data.frame(type=rep(c("T", "F", "P"), 4),
                    size=rep(c("50%", "100%", "200%", "150%"), each=3), # cannot sort this
                    size_num = rep(c(.5, 1, 2, 1.5), each=3), # can sort this
                    amount=c(48.4, 48.1, 46.8, 
                             25.9, 26.0, 24.9,
                             20.8, 21.5, 16.5,
                             21.1, 21.4, 20.1))

temp %>% 
  arrange(size_num) %>% # sort
  mutate_at(vars(size), funs(factor(., levels=unique(.)))) %>% # convert to factor

  ggplot() + 
  geom_bar(aes(x = type, y=amount, fill=type), 
           position="dodge", stat="identity") + 
  facet_grid(~ size)

คุณสามารถใช้วิธีนี้เพื่อจัดเรียงแท่งภายในแง่มุมได้เช่นกันแม้ว่าคุณจะสามารถเลือกลำดับที่ต้องการได้เพียงรายการเดียว:

    temp %>% 
  arrange(size_num) %>%
  mutate_at(vars(size), funs(factor(., levels=unique(.)))) %>%
  arrange(desc(amount)) %>%
  mutate_at(vars(type), funs(factor(., levels=unique(.)))) %>%
  ggplot() + 
  geom_bar(aes(x = type, y=amount, fill=type), 
           position="dodge", stat="identity") + 
  facet_grid(~ size)


  ggplot() + 
  geom_bar(aes(x = type, y=amount, fill=type), 
           position="dodge", stat="identity") + 
  facet_grid(~ size)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.