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

在此处输入图像描述

在上图中,我想将 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类型命令。谢谢!

4

1 回答 1

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然后调用该函数生成一个调色板,只要组的数量。rep只要子组(A1、A2 等)的长度相等,使用就可以工作。也许有人可以将其扩展为更一般的情况。

于 2013-05-29T21:53:55.737 回答