2016-10-26 4 views
2

私は、データフレームのSalesCategoryに基づいて色を与えるプロットを持っています。しかし、これらのうちのいくつかは、もはやアクティブでなく、アクティブでないグレーの色を割り当てたいと思っています。SaleCategory s。アクティブなカテゴリに1組の色を割り当て、非アクティブなセットに色のセットを割り当てるにはどうすればよいですか?この例では、すべてのケースで簡単にscale_fill_manualを使用できるため、このサンプルは簡単ですが、この要求の背後にあるデータは、それが持つカテゴリの数のために実行不能になります。カテゴリの異なるグループに異なる色のセットを割り当てるにはどうすればよいですか?

myFrame <- 
    data.frame(Year = c(2010L, 2010L, 2010L, 2010L, 2011L, 2011L, 2011L, 2011L, 2011L, 
         2012L, 2012L, 2012L, 2012L, 2012L, 2012L, 2013L, 2013L, 2013L, 
         2013L, 2013L, 2013L, 2014L, 2014L, 2014L, 2014L, 2014L, 2014L), 
       SalesCategory = c("Bobsleds", "IceSkates", "RollerSkates", "HockeyPucks", "Bobsleds", 
           "IceSkates", "RollerSkates", "HockeyPucks", "RollerBlades", "Bobsleds", 
           "IceSkates", "RollerSkates", "HockeyPucks", "RollerBlades", "Helmets", 
           "Bobsleds", "IceSkates", "RollerSkates", "HockeyPucks", "RollerBlades", 
           "Helmets", "Bobsleds", "IceSkates", "RollerSkates", "HockeyPucks", 
           "RollerBlades", "Helmets"), 
       PctOfSales = c(0.5, 0.3, 0.1, 0.1, 0.3, 0.3, 0.3, 0.05, 0.05, 0.1, 0.2, 0.4, 
           0, 0.15, 0.15, 0, 0.05, 0.4, 0, 0.35, 0.2, 0, 0, 0.4, 0, 0.4, 
           0.2), 
       ActiveRevenueStream =c(FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, 
             FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, 
             TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE)) 

# this plot gives colors to all the categories indiscriminantly 
ggplot(myFrame,(aes(Year,PctOfSales, fill = SalesCategory))) + 
    geom_bar(stat = 'identity') 

答えて

3

どのようにしたら?

library(RColorBrewer) 
    uniq_inactive<-unique(myFrame[myFrame$ActiveRevenueStream==FALSE,"SalesCategory"]) 
    uniq_active<-unique(myFrame[myFrame$ActiveRevenueStream==TRUE,"SalesCategory"]) 

    my_active_cols <- brewer.pal(length(uniq_active),"Set1") 
    names(my_active_cols)<- uniq_active 

    my_inactive_cols <- gray.colors(length(uniq_inactive),start=0.5,end=0.7) 
    names(my_inactive_cols) <- uniq_inactive 

    my_cols <- c(my_active_cols,my_inactive_cols) 

ggplot(myFrame,(aes(Year,PctOfSales, fill = SalesCategory))) + 
    geom_bar(stat = 'identity') + scale_fill_manual(values=my_cols) 

enter image description here

+0

パーフェクト。ありがとうございました。 – jks612

関連する問題