手动设置ggplot2的组颜色
我有一个数据集,我必须做几十个地块。 数据由每组30个组和几组测量值组成。
大多数地块不会一次使用所有的群体。
我的目标是为一组组合设置一个单一的颜色调色板,使得所有graphics中的任何给定的组都是相同的颜色。 在下面的例子中,这意味着Group C
在Plot 1
和Plot 2
是相同的颜色。
我的问题是如何去做这件事。
我已经尝试了scale_fill_manual(和适当的scal_color_manual)的几个变种。 虽然颜色是从指定的调色板中select出来的,但我似乎无法通过组指示调色板,或者以某种方式“跳过”与缺失组相对应的颜色
我也想过尝试添加颜色信息作为正在绘制的数据列,但是我不确定如何使用此列作为组的颜色。
# 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"))
您可以将每个组与颜色相关联,然后传递给函数:
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 # ABCDE # 1: #333BFF #CC6600 #9633FF #E2FF33 #E3DB71