データセットがあり、そこから数十のプロットを作成する必要があります。データは30のグループと各グループ内のいくつかの測定で構成されています。
ほとんどのプロットは、すべてのグループを一度に使用するわけではありません。
私の目標は、特定のグループがすべてのグラフで同じ色になるように、グループのセットに単一のカラーパレットを持たせることです。以下の例では、これはGroup C
がPlot 1
とPlot 2
で同じ色であることを意味します。
私の質問は、これについてどうするかです。
Scale_fill_manual(および必要に応じてscal_color_manual)のバリエーションをいくつか試しました。色は指定されたパレットから選択されますが、グループごとにパレットのインデックスを作成したり、欠落しているグループに対応する色を「スキップ」する他の方法はありません
また、プロットするデータの列として色情報を追加しようと考えましたが、この列をグループの色として使用する方法がわかりません。
# 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
# A B C D E
# 1: #333BFF #CC6600 #9633FF #E2FF33 #E3DB71
_