r - 翻转图例的顺序而不改变情节中的顺序

标签 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'))

enter image description here

我希望图例中的 'q' 和 'r' 被颠倒而不改变情节中 'q' 和 'r' 的顺序。
scale.x.reverse()看起来很有希望,但它似乎在因子范围内不起作用(就像这个条形图的情况一样)。

最佳答案

您正在寻找 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))

Brian 在聊天中提醒我,通过设置 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"))

关于r - 翻转图例的顺序而不改变情节中的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22517002/

相关文章:

r - 使用 ggplot2 和 drc 绘制剂量 react 曲线

r - 有没有办法去除ggplot2中图例的边框?

R ggplot2 aes arguments - 我怎么知道哪些参数有效?

r - 无法在 foreach 中运行 Rcpp 函数 - "NULL value passed as symbol address"

r - dplyr::count() 不适用于 MacOS

r - 计算稀疏矩阵的零空间

r - 从单个图像中的单个数据帧绘制许多线图

sql - RODBC:合并来自不同数据库的表( channel )

R ggplot2 : Setting additional specific axis tick marks

R:使用 ggplot2 的散点图矩阵,主题因构面面板而异