2016-08-26 2 views
2

이 scale_fill_manual 사용할 수 있도록()

library(dplyr) 
library(ggplot2) 

dd <- mpg %>% 
     group_by(manufacturer, cyl) %>% 
     summarise(n = n()) %>% 
     ungroup() 

mm <- dd %>% 
     group_by(manufacturer) %>% 
     summarise(mcyl = weighted.mean(cyl, n)) %>% 
     arrange(mcyl) %>% 
     ungroup() 

dd %>% left_join(mm) %>% 
     ggplot(mapping = aes(x = reorder(manufacturer, mcyl), y = n, fill = factor(cyl))) + 
     geom_bar(stat = "identity", position = "fill") + 
     coord_flip() + 
     scale_fill_brewer(palette = "Purples") 

enter image description here

이 질문 보라색 색상 표와 막대 차트를 만드는 다음 코드를 살펴 보자 아우디 레드 ("레즈")와 포드 블루 ("블루스")를위한 팔레트는 보라색을 유지하면서 ("Purples")?

빨간색/파란색/자주색 팔레트를 변수에 넣고 scale_fill_manual() (설명 됨, in this related Q&A)으로 전달하는 가장 편리한 방법은 무엇입니까?

+1

정의를 정의한 다음 ID를 사용? – zx8754

+0

@ zx8754 이것을 대답으로 확장 할 수 있다면 ...? – TemplateRex

+0

죄송합니다. 지금은 전체 답변을 드릴 시간이별로 없습니다. 색상 팔레트를 빨간색, 파란색, purples, 각 4로 만든 다음 새 myCol 열로 자동차 이름에 매핑하고 해당 열을 사용하여 채 웁니다. – zx8754

답변

0

전체 작업 솔루션 :

cyl <- sort(unique(mpg$cyl)) 
ncat <- length(cyl)   # 4 types of cylinders 

# create palettes 
library(RColorBrewer) 
purples <- tibble(cyl, colr = brewer.pal(ncat, "Purples")) 
reds <- tibble(manufacturer = "audi", cyl, colr = brewer.pal(ncat, "Reds")) 
blues <- tibble(manufacturer = "ford", cyl, colr = brewer.pal(ncat, "Blues")) 

# merge them with the data 
dd_p <- dd %>% filter(!(manufacturer %in% c("audi", "ford"))) %>% left_join(purples) 
dd_r <- dd %>% filter(manufacturer == "audi") %>% left_join(reds) 
dd_b <- dd %>% filter(manufacturer == "ford") %>% left_join(blues) 

gg_dd <- rbind(dd_p, dd_r, dd_b) %>% 
     left_join(mm) 

gg_dd %>% 
     ggplot(mapping = aes(x = reorder(manufacturer, mcyl), y = n, fill = colr)) + 
     geom_bar(stat = "identity", position = "fill") + 
     coord_flip() + 
     scale_fill_identity() 

enter image description here

관련 문제