为了账号安全,请及时绑定邮箱和手机立即绑定

ggplot2条形图中的订单栏

ggplot2条形图中的订单栏

慕姐8265434 2019-05-25 17:21:45
ggplot2条形图中的订单栏我正在尝试制作一个条形图,其中最大的条最接近y轴,最短的条最远。所以这有点像我的表    Name   Position1   James  Goalkeeper2   Frank  Goalkeeper3   Jean   Defense4   Steve  Defense5   John   Defense6   Tim    Striker所以我正在尝试建立一个条形图,根据位置显示玩家数量p <- ggplot(theTable, aes(x = Position)) + geom_bar(binwidth = 1)但是图表显示守门员杆然后是防守,最后是前锋一个。我希望图表被排序,以便防守栏最接近y轴,守门员一个,最后是前锋一个。谢谢
查看完整描述

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(...))


查看完整回答
反对 回复 2019-05-25
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

@GavinSimpson:这reorder是一个强大而有效的解决方案:

ggplot(theTable,
       aes(x=reorder(Position,Position,
                     function(x)-length(x)))) +
       geom_bar()


查看完整回答
反对 回复 2019-05-25
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

使用scale_x_discrete (limits = ...)指定的巴左右。

positions <- c("Goalkeeper", "Defense", "Striker")p <- ggplot(theTable, aes(x = Position)) + scale_x_discrete(limits = positions)


查看完整回答
反对 回复 2019-05-25
?
森林海

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()


查看完整回答
反对 回复 2019-05-25
  • 4 回答
  • 0 关注
  • 617 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信