在不改变绘图中的排序的情况下翻转图例的顺序

Cla*_*ley 17 r ggplot2

我发现当coord_flip()使用ggplot2 添加到某些图时,图例中值的顺序不再与图中值的顺序对齐.

例如:

dTbl = data.frame(x=c(1,2,3,4,5,6,7,8),
                  y=c('a','a','b','b','a','a','b','b'),
                  z=c('q','q','q','q','r','r','r','r'))

print(ggplot(dTbl, aes(x=factor(y),y=x, fill=z)) +
      geom_bar(position=position_dodge(), stat='identity') +
      coord_flip() +
      theme(legend.position='top', legend.direction='vertical'))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我希望在不改变图中'q'和'r'的顺序的情况下反转图例中的'q'和'r'.

scale.x.reverse() 看起来很有希望,但似乎并没有在因素范围内起作用(就像这个条形图的情况一样).

jor*_*ran 31

您正在寻找guides:

ggplot(dTbl, aes(x=factor(y),y=x, fill=z)) +
      geom_bar(position=position_dodge(), stat='identity') +
      coord_flip() +
      theme(legend.position='top', legend.direction='vertical') + 
      guides(fill = guide_legend(reverse = TRUE))
Run Code Online (Sandbox Code Playgroud)

我在聊天提醒布赖恩,有为任意排序做到这一点,通过设定一个更普遍的方式breaks的说法:

ggplot(dTbl, aes(x=factor(y),y=x, fill=z)) +
      geom_bar(position=position_dodge(), stat='identity') +
      coord_flip() +
      theme(legend.position='top', legend.direction='vertical') + 
      scale_fill_discrete(breaks = c("r","q"))
Run Code Online (Sandbox Code Playgroud)

  • 这仅适用于改变级别标签的顺序,但我们不能对任意级别重新排序. (2认同)
  • @PauloCardoso很好地指出,但这里不需要,因为当coord_flip()搞乱时,标签将被反转或不反转(最有可能) (2认同)