2012-10-03 3 views
3

세 건물의 에너지 사용량을 문서화 한 데이터 세트가 있습니다. I 세부터 매월 ('차단') 가열 ('깊이') 및 냉각 ("테이블") 데이터가 본질적ggplot에서 독립적 인 레이어의 색상을 조정하는 방법은 무엇입니까?

data <- melt(diamonds[,c('depth','table','cut','color')],id=c('cut','color')) 

: I 세트 다이아몬드에서 모방 할 수있는 용융 된 데이터 프레임을 가지고 다른 건물 (7 '색상'요인). 나는 매월 막대 그래프 ('cut')에 나란히 세 건물 (7 '색상'요인)을 플로트하고 싶습니다.

냉각 ('테이블') 또는 난방 ('깊이')을 나타내는 막대가 건물 ('색상'요소)을 기준으로 음영을 변경하고 월별로 그룹화 된 상태 ('컷')로 표시되도록합니다. 이것은 다이아몬드 데이터를 시각화하는 나쁜 방법이지만 가열 및 냉각 월이 일반적으로 겹치지 않아 건물에서 잘 작동해야합니다. 지금까지 내가 가지고 : 나는 scale_fill_manual와 함께 연주 시도,하지만 작동하는 전략 생각하지 못했습니다

p <- ggplot(data, 
     aes(color,value,group=cut)) 
p <- p + geom_bar(stat = 'identity', 
       position = 'dodge', 
       aes(fill = variable)) 
print(p) 

:

colours <- c('#0000FF', '#0033FF', '#0066FF', '#FF0000', '#FF3300', '#FF6600') 

p <- p + scale_fill_manual(values = colours, 
          group = data$variable) 

답변

6

을 몇 가지 속임수, 그것은 가능하다. 다이아몬드를 기반으로 데이터 세트를 도출하는 것은 매우 좋았지 만, 나는 작은 데이터로 작업 할은, 당신은 당신의 채우기 색상 변수 (hc)와 건물 (building)에 모두 싶으신

set.seed(1234) 
data <- 
expand.grid(month = month.abb, 
      building = c("Building A", "Building B", "Building C"), 
      hc = c("Heating", "Cooling")) 
data$value <- rnorm(nrow(data), 60, 10) 

설정 그래서 그 상호 작용으로 설정하십시오.

ggplot(data, aes(building,value,group=month)) + 
    geom_bar(stat = 'identity', 
      position = 'dodge', 
      aes(fill = interaction(building, hc))) 

enter image description here

우리는이 더 당신이 원하는처럼 만들기 위해 다른 주변의 음영을 나타내는 색상을 선택할 수 있습니다. RColorBrewer 팔레트의 "블루스"와 "레즈"의 중간 부분을 사용했습니다.

colours <- c("#FC9272", "#FB6A4A", "#EF3B2C", "#9ECAE1", "#6BAED6", "#4292C6") 
# library("RColorBrewer") 
# colours <- c(brewer.pal(9,"Reds")[4:6], brewer.pal(9,"Blues")[4:6]) 

하고 이러한 색상을 지정 scale_fill_manual을 사용했다.

ggplot(data, aes(building,value,group=month)) + 
    geom_bar(stat = 'identity', 
      position = 'dodge', 
      aes(fill = interaction(building, hc))) + 
    scale_fill_manual(values=colours) 

enter image description here

진짜 속임수는 전설 덜 복잡한 만드는 것입니다. 나는 단지 레벨 중 2 개 (색상면에서 중간 건물)를 나열하고 다른 이름 (그리고 전설의 다른 제목)을 부여합니다.

ggplot(data, aes(building,value,group=month)) + 
    geom_bar(stat = 'identity', 
      position = 'dodge', 
      aes(fill = interaction(building, hc))) + 
    scale_fill_manual("Heating/cooling", 
        values=colours, 
        breaks=c("Building B.Heating", "Building B.Cooling"), 
        labels=c("Heating", "Cooling")) 

enter image description here

+0

이 매우 통찰력! 그러나 매월 (또는 건물)이 다른 색상이 될 수 있습니까? 이 그라데이션은 일관성을 위해 각 건물 (또는 월)에 적용됩니다. 그 질문이 더 명확합니까? –

+0

감사합니다. 나는이 대답을 받아 들일 것입니다! 세 번째 상호 작용을 추가해야했습니다. 건배! –

관련 문제