为GGPLOT2

问题描述 投票:0回答:2
我的目标是为一组组具有一个单一颜色的pallete,以使任何给定的组在所有图中均具有相同的颜色。 在下面的示例中,这意味着

Group C

Plot 1

Plot 2

中是相同的颜色。 
我的问题是如何解决这个问题。
我尝试了几种scale_fill_manual的变体(以及适当的情况下)。  从指定的pallete选择颜色时, 
我似乎无法按小组索引pallette,或者其他方法可以“跳过”对应于缺少组的颜色。

我还认为试图将颜色信息添加为要绘制的数据的列,但是我不确定如何将此列用作组的颜色。

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"))

您可以将每个组与颜色相关联,然后传递到功能:

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) Plot Example

然后使用您的图:
grid.arrange(ncol=2,  simplePlot(DT1, tit="Plot 1"), 
  simplePlot(DT2, tit="Plot 2"))
r colors ggplot2
2个回答
102
投票

我认为您的方法的问题是没有命名的颜色,所以
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

enter image description here

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


您还可以使用

scale_fill_brewer()
或其他变体,例如
scale_colour_brewer()

等。它不能像选择单个六角形那样精确地控制配色方案,但是您可以轻松地在许多带有

palette =的预设配色方案中进行选择。
参数和配色方案在输出子图之间的相同梯度上是一致的。
# A Basic Plot simplePlot <- function(DT, tit) ggplot(DT ,aes(x=Name, y=Value, fill=Group)) + geom_bar(stat="identity") + scale_fill_brewer(palette = 1) + # Line added 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"))

0
投票

    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.