我有一个看起来像这样的数据集
> 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()
我得到了这个结果。
现在,Incentives
在图表中按平均值排序,而与Goal
无关,这正是我想要的。但是,如何使每个new
的{{1}}条高于ret
条呢?即我不要所有Incentive
的列表紧跟着所有new
的列表,只需更改每个ret
内的顺序即可。如果可能的话,我也想避免对图形进行分面。
这似乎是一件容易的事,但是我花了一段时间尝试完成却没有成功,所以任何建议都将不胜感激。
答案 0 :(得分:0)
答案 1 :(得分:0)
另一种解决方案,将变量设置为有序因子,然后绘制为:
dflong$Goal = ordered(dflong$Goal, levels = c("ret", "new"))
这仍然与凯思的评论非常相似,但我发现很好,因为它不会重命名图例标题“ factor(Goal ...”,并且省去了重命名图例标题的步骤。