我需要将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))
在上图中,我想将A1 / A2的x轴标签涂成红色,B1 / B2涂成绿色,C1 / C2涂成蓝色。以下可能有用,
theme(axis.text.x = element_text(colour=c(rep("red",2), rep("green",2), rep("blue",2))))
但是我有一个大得多的数据集,这使得手动着色变得更加困难。更喜欢colour=grp
类型命令。谢谢!
答案 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
就可以工作。也许有人可以将其扩展为一般情况。