颜色单个ggplot轴项目

时间:2014-10-29 04:33:19

标签: r ggplot2 data.table

我创建了一个图表,并希望根据变量为其中一个x轴项目着色。我看过这篇文章(How to get axis ticks labels with different colors within a single axis for a ggplot graph?),但我很难将其应用到我的数据集中。 enter image description here

df1 <- data.frame(var=c("a","b","c","a","b","c","a","b","c"), 
                  val=c(99,120,79,22,43,53,12,27,31),
                  type=c("alpha","alpha","alpha","bravo","bravo","bravo","charlie","charlie","charlie"))

myvar="a"

ggplot(df1,aes(x=reorder(var,-val), y=val,fill=type)) + geom_bar(stat="identity")

有关如何在x轴值等于myvar时将其设为红色的提示吗?

更新:感谢@ddiez的一些指导。我终于知道在绘图之前我必须重新排序。我也应该用data.table创建我的原始示例,所以我不确定这是否会影响原始响应。我将原始数据集修改为data.table,并使用以下代码取得成功。

df1 <- data.table(var=c("a","b","c","a","b","c","a","b","c"), 
                  val=c(99,120,79,22,43,53,12,27,31),
                  type=c("alpha","alpha","alpha","bravo","bravo","bravo","charlie","charlie","charlie"))

myvar="a"

df1[,axisColour := ifelse(var==myvar,"red","black")]
df1$var <- reorder(df1$var,-df1$val,sum)

setkey(df1,var,type)

ggplot(df1,aes(x=var, y=val,fill=type)) + geom_bar(stat="identity") +
  theme(axis.text.x = element_text(colour=df1[,axisColour[1],by=var][,V1]))

enter image description here

1 个答案:

答案 0 :(得分:0)

可能有更优雅的解决方案,但快速入侵(要求您知道最终订单)将是:

ggplot(df1,aes(x=reorder(var,-val), y=val,fill=type)) +
geom_bar(stat="identity") +
theme(axis.text.x = element_text(colour=c("black","black","red")))

使用变量myvar的解决方案(但可能有更好的方法):

# reorder the factors in the data.frame (instead of in situ).
df1$var=reorder(df1$var, -df1$val)

# create a vector of colors for each level.
mycol=rep("black", nlevels(df1$var))
names(mycol)=levels(df1$var)

# assign the desired ones a different color.
mycol[myvar]="red"

ggplot(df1,aes(x=var, y=val,fill=type)) +
  geom_bar(stat="identity") +
  theme(axis.text.x = element_text(colour=mycol))