重新排列组内ggplot2 stat_summary中的小节,不分面

时间:2019-03-16 15:05:13

标签: r ggplot2

我有一个看起来像这样的数据集

> df_long
      Goal  Incentive value
241    new       Land     1
865    new       Land     2
880    new       Land     2
943    new       Land     2
1267   new       Land     3
2854   new       Land     3
20271  new  Utilities     1
20286  new  Utilities     0
20910  new  Utilities     0
20973  new  Utilities     1
20988  new  Utilities     0
21297  new  Utilities     0
21312  new  Utilities     1
22884  new  Utilities     2
28856  new Permitting     3
28871  new Permitting     1
29495  new Permitting     1
29558  new Permitting     0
29573  new Permitting     3
29882  new Permitting     0
29897  new Permitting     1
31469  new Permitting     2
37441  ret       Land     1
37456  ret       Land     1
38080  ret       Land     1
38143  ret       Land     3
38158  ret       Land     3
38467  ret       Land     1
38482  ret       Land     1
40054  ret       Land     0
57486  ret  Utilities     0
58110  ret  Utilities     0
58188  ret  Utilities     0
58512  ret  Utilities     1
60099  ret  Utilities     2
66071  ret Permitting     3
66695  ret Permitting     1
66773  ret Permitting     1
67097  ret Permitting     1
68684  ret Permitting     0

我使用以下代码通过Incentive创建了均值Goal的ggplot:

ggplot(df_long,aes(x=reorder(factor(Incentive), value), y=value, fill=Goal)) + 
    stat_summary(aes(width=0.7), fun.y="mean", geom="bar", position = "dodge") + 
    coord_flip()

我得到了这个结果。  enter image description here 现在,Incentives在图表中按平均值排序,而与Goal无关,这正是我想要的。但是,如何使每个new的{​​{1}}条高于ret条呢?即我不要所有Incentive的列表紧跟着所有new的列表,只需更改每个ret内的顺序即可。如果可能的话,我也想避免对图形进行分面。

这似乎是一件容易的事,但是我花了一段时间尝试完成却没有成功,所以任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:0)

kath建议的解决方案解决了该问题。下面是更新的代码和按顺序正确的新图形。

Map

enter image description here

答案 1 :(得分:0)

另一种解决方案,将变量设置为有序因子,然后绘制为:

dflong$Goal = ordered(dflong$Goal, levels = c("ret", "new"))

这仍然与凯思的评论非常相似,但我发现很好,因为它不会重命名图例标题“ factor(Goal ...”,并且省去了重命名图例标题的步骤。