2013-05-29 164 views
0

我需要將X軸標籤的顏色與框相同。例如,按組顏色軸標籤

library(ggplot2) 
library(reshape2) 
df = matrix(rnorm(60),6,10) 
rownames(df) = paste0(rep(c("A","B","C"),2),1:2) 
df=melt(df) 
df = cbind(df,grp=substr(df$Var1,1,1)) 
ggplot(df) + geom_boxplot(aes(x=Var1, y=value, fill=grp)) 

enter image description here

在上面的圖像,我想在顏色紅色,B1/B2的A1/A2的x軸標籤在藍綠色和C1/C2。以下可能的工作,

theme(axis.text.x = element_text(colour=c(rep("red",2), rep("green",2), rep("blue",2)))) 

enter image description here

但我有一個更大的數據集這使得它更難手動顏色。更喜歡colour=grp類型的命令。謝謝!

回答

1

有可能是一個更好的方式來做到這一點,但由於ggplot的scale_fill_discrete電話scales::hue_pal,你可以用它來生成你的小區採用相同的顏色:

library(ggplot2) 
library(reshape2) 
df = matrix(rnorm(60),6,10) 
rownames(df) = paste0(rep(c("A","B","C"),2),1:2) 
df=melt(df) 
df = cbind(df,grp=substr(df$Var1,1,1)) 
myplot <- ggplot(df) + geom_boxplot(aes(x=Var1, y=value, fill=grp)) 

library(scales) 
x_cols <- rep(hue_pal()(length(unique(df$grp))), each=2) 
myplot <- myplot + theme(axis.text.x = element_text(colour=x_cols) 

x_cols定義在這裏創建了一個調色板功能hue_pal,然後調用該函數生成一個調色板,只要組數。只要子組(A1,A2等)的長度相等,使用rep就可以工作。也許有人可以擴展這個更普遍的情況。

+0

謝謝!我推廣如下:'x_cols = hue_pal()(length(levels(df $ grp))); names(x_cols)= levels(df $ grp); myplot + theme(axis.text.x = element_text(color = x_cols [substr(levels(df $ Var1),1,1)]))' – harkmug

+1

請注意'scale_fill/color_discrete'採用'hue_pal'的相同參數,所以你可以製作一個通用的自定義調色板。 –