2012-10-03 42 views
3

我有一个数据集,记录了三座建筑物的能源使用情况。我具有可以从设置钻石来模拟熔融数据帧:如何在ggplot中为独立图层缩放颜色?

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

从本质上讲,我有加热(“深度”)和冷却(“表”)数据每个月(“切割”)从三个不同的建筑物(7种颜色因素)。我想在每个月的条形图('cut')中并排绘制三个建筑物(7个“颜色”因素)。我想要表示冷却('表')或加热('深度')的条形根据建筑物('颜色'因子)改变它们的阴影,同时按月('切')保持分组。这是钻石数据可视化的一种不好的方式,但对于建筑物来说,它们应该很好地工作,因为它们的加热和冷却月份通常不会重叠。到目前为止,我有:

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

我试着用scale_fill_manual玩,但不能认为一个可行的策略:

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

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

回答

6

有了一些挂羊头卖狗肉,这是可能的。推导基于钻石的数据集是很不错的,但我想用一个较小的数据的工作集

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) 

你要根据你的填充颜色既对变量(hc)和建筑(building)所以将其设置为该交互。

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

谢谢,我会接受这个答案!我只需要添加第三个交互。干杯! –