所以我得到了一个数据框,其中包含足球运动员的姓名、国籍和足球比赛的统计数据。我想找到每个国家/地区最好的 10 名玩家,总结他们的“特殊”统计数据,选择总和最高的前 10 个国家/地区,然后绘制它。
fifka3 <- fifka %>% group_by(Nationality) %>%
top_n(n = 10, wt=Special) %>% summarize(Top10 = sum(Special)) %>% top_n(10)
当我绘制它时:
ggplot(data=fifka3, aes(x=fct_infreq(Nationality),y=Top10)) +
geom_bar(stat="identity") +
mytheme_1() ##just my theme function to save time
函数fct_infreq()
不会改变绘图上因素的顺序,我不知道为什么。是否是因为我使用group_by()
从“fifka”创建了 df“fifka3”,并且 df“fifka3”仍然包含如下所示的其他因素?我该如何更改 ggplot() 函数中的顺序?
str(fifka3)
Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 10 obs. of 2 variables:
$ Nationality: Factor w/ 165 levels "Afghanistan",..: 3 13 19 35 54 59 78 122 127 139
$ Top10 : int 23883 21409 23788 23008 21691 21581 21530 21595 22696 21483`
最佳答案
fct_infreq()
在这种情况下不起作用,因为您已经汇总了数据,并且 Nationality
的每个值仅出现一次(即 freq = 1对于每个国籍),因此默认按字母顺序排序。
如果您正在 forcats 包中寻找解决方案,那么您需要的是 fct_reorder()
:
ggplot(data = fifka3,
aes(x = fct_reorder(Nationality, Top10, .desc = TRUE),
y = Top10)) +
geom_col() # geom_col() is equivalent to geom_bar(stat = "identity), with less typing
郑重声明,期望其他人从链接下载数据通常是降低获得帮助的可能性的可靠方法。在我看来,Kaggle 并不像来自完全未经验证的来源的链接那么糟糕,但话又说回来,我必须先登录才能下载任何内容。请遵照建议here下次以易于使用的方式提供数据。
关于r - 使用 fct_infreq() 更改图上因子的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52018079/