颜色轴按组标签

时间:2013-05-29 20:55:45

标签: r ggplot2 themes

我需要将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

在上图中,我想将A1 / A2的x轴标签涂成红色,B1 / B2涂成绿色,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 个答案:

答案 0 :(得分: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就可以工作。也许有人可以将其扩展为一般情况。