2013-06-18 15 views
33

私は数十のプロットを作成する必要があるデータセットを持っています。 データは30のグループと各グループ内のいくつかの測定値で構成されています。ggplot2のグループカラーを手動で設定する

ほとんどのプロットは、すべてのグループを一度に使用するわけではありません。

私の目標は、任意のグループがすべてのグラフで同じ色になるように、グループのセットに対して1つのカラーパレットを作成することです。 以下の例では、Group CPlot 1と同色で、Plot 2と同じ色です。

私の質問はこれについてどうやって行くかです。

私はscale_fill_manual(および必要に応じてscal_color_manual)のいくつかのバリエーションを試しました。 パレットをグループでインデックスすることはできません。グループに対応する色を「スキップ」することはできません。

また、プロットされているデータの列としての色情報が含まれていますが、この列をグループの色として使用する方法がわかりません。

Plot Example

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

答えて

38

あなたは関数に渡し、その後、色とあなたのグループのそれぞれを関連付けることができます。

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

enter image description here

あなたのアプローチの問題は、色に名前が付けられていないということだったと思うので、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 
関連する問題