【问题标题】:Manually setting group colors for ggplot2为 ggplot2 手动设置组颜色
【发布时间】:2013-06-15 07:56:34
【问题描述】:

我有一个数据集,我必须从中制作几十个图。 数据由 30 个组和每组内的几个测量值组成。

大多数地块不会一次使用所有组。

我的目标是为一组组提供一个单一的调色板,以使任何给定的组在所有图表中都具有相同的颜色。 在下面的示例中,这意味着Group CPlot 1Plot 2 中的颜色相同。

我的问题是如何解决这个问题。

我已经尝试了 scale_fill_manual 的几种变体(以及 scal_color_manual,如果合适的话)。虽然颜色是从指定的调色板中选择的, 我似乎无法按组索引调色板,或者以其他方式“跳过”与缺失组对应的颜色

我还想尝试将颜色信息添加为正在绘制的数据的列,但我不确定如何将此列用作组的颜色。

library(ggplot2)
library(data.table)

# SAMPLE DATA: 
DT1 <- data.table(Name=c("C_sub1", "A_sub1", "A_sub2"), Value=c(2,5,3), Group=c("C", "A", "A"), key="Group")
DT2 <- data.table(Name=c("A_sub1", "B_sub1", "C_sub1", "C_sub2"), Value=c(4,3,6,3), Group=c("A", "B", "C", "C"), key="Group")

# SAMPLE Color Pallette  
ColorsDT <-  data.table(Group=LETTERS[1:5], Color=c("#333BFF", "#CC6600", "#9633FF", "#E2FF33", "#E3DB71"), key="Group")

# Add a column for Color, according to the Group
DT1[ColorsDT, Color := i.Color]
DT2[ColorsDT, Color := i.Color]

# A Basic Plot
simplePlot <- function(DT, tit) 
  ggplot(DT ,aes(x=Name, y=Value, fill=Group)) +
   geom_bar(stat="identity") + xlab("") + ggtitle(tit)
    # Tried sevearl variations of: 
    #  + scale_fill_manual(values=ColorsDT$Color)


# Plot Them
grid.arrange(ncol=2,  simplePlot(DT1, tit="Plot 1"),  simplePlot(DT2, tit="Plot 2"))

【问题讨论】:

    标签: r colors ggplot2


    【解决方案1】:

    您可以将每个组与颜色相关联,然后传递给函数:

    group.colors <- c(A = "#333BFF", B = "#CC6600", C ="#9633FF", D = "#E2FF33", E = "#E3DB71")
    
    simplePlot <- function(DT, tit) 
      ggplot(DT ,aes(x=Name, y=Value, fill=Group)) +
      geom_bar(stat="identity") + xlab("") + ggtitle(tit) +
      #Specify colours
      scale_fill_manual(values=group.colors)
    

    然后使用你的情节:

    grid.arrange(ncol=2,  simplePlot(DT1, tit="Plot 1"), 
      simplePlot(DT2, tit="Plot 2"))
    

    我认为你的方法的问题是没有命名颜色,所以scale_fill_manual() 无法关联它们。比较:

    ColorsDT <-  data.table(Group=LETTERS[1:5], Color=c("#333BFF", "#CC6600", "#9633FF", "#E2FF33", "#E3DB71"), key="Group")
    ColorsDT
    #   Group   Color
    #1:     A #333BFF
    #2:     B #CC6600
    #3:     C #9633FF
    #4:     D #E2FF33
    #5:     E #E3DB71
    

    与:

    ColorsDT.name <-  data.table(A = "#333BFF", B = "#CC6600", C = "#9633FF", D = "#E2FF33", E =  "#E3DB71")
    ColorsDT.name
    #          A       B       C       D       E
    # 1: #333BFF #CC6600 #9633FF #E2FF33 #E3DB71
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-28
      • 1970-01-01
      • 2014-11-29
      • 1970-01-01
      相关资源
      最近更新 更多