【问题标题】:colour single ggplot axis item颜色单个ggplot轴项
【发布时间】:2014-10-29 04:33:18
【问题描述】:

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

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 时,如何使 x 轴值变为红色?

更新:感谢@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]))

【问题讨论】:

    标签: r ggplot2 data.table


    【解决方案1】:

    可能有更优雅的解决方案,但快速破解(需要您知道最终顺序)将是:

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

    【讨论】:

    • 在解决这个特定示例时,它没有回答原始问题,即如何根据与 myvar 的匹配来执行此操作,其中值可以更改。
    • 我还没有完全使用你的颜色矢量方法,但你提供了一些很好的指导。我已更新我的问题以反映我的答案,但我不确定您的或我的方法是否更清洁/更快。
    • @Dan 如果您有其他答案,也许您可​​以将其作为正确答案发布(而不是内联问题),以便对其进行投票。
    猜你喜欢
    • 2021-08-31
    • 2019-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多