4 回答
TA贡献1824条经验 获得超5个赞
排序的关键是按所需顺序设置因子的级别。不需要有序因子; 有序因子中的额外信息不是必需的,如果在任何统计模型中使用这些数据,可能会导致错误的参数化 - 多项式对比不适合这样的标称数据。
## set the levels in order we want
theTable <- within(theTable,
Position <- factor(Position,
levels=names(sort(table(Position),
decreasing=TRUE))))
## plot
ggplot(theTable,aes(x=Position))+geom_bar(binwidth=1)
条形图
在最一般意义上,我们只需要将因子水平设置为所需的顺序。如果未指定,则因子的级别将按字母顺序排序。您也可以在上面的因子调用中指定级别顺序,也可以采用其他方式。
theTable$Position <- factor(theTable$Position, levels = c(...))
TA贡献1796条经验 获得超7个赞
@GavinSimpson:这reorder
是一个强大而有效的解决方案:
ggplot(theTable, aes(x=reorder(Position,Position, function(x)-length(x)))) + geom_bar()
TA贡献2080条经验 获得超4个赞
使用scale_x_discrete (limits = ...)
指定的巴左右。
positions <- c("Goalkeeper", "Defense", "Striker")p <- ggplot(theTable, aes(x = Position)) + scale_x_discrete(limits = positions)
TA贡献2011条经验 获得超2个赞
我认为已经提供的解决方案过于冗长。使用ggplot进行频率排序条形图的更简洁方法是
ggplot(theTable, aes(x=reorder(Position, -table(Position)[Position]))) + geom_bar()
它与Alex Brown的建议相似,但有点短,无需任何函数定义。
更新
我认为我的旧解决方案当时很好,但是现在我宁愿使用forcats::fct_infreq
哪种方式按频率排序因子水平:
require(forcats)ggplot(theTable, aes(fct_infreq(Position))) + geom_bar()
- 4 回答
- 0 关注
- 654 浏览
添加回答
举报