r - 使用 fct_infreq() 更改图上因子的顺序

标签 r ggplot2

所以我得到了一个数据框,其中包含足球运动员的姓名、国籍和足球比赛的统计数据。我想找到每个国家/地区最好的 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

plot

郑重声明,期望其他人从链接下载数据通常是降低获得帮助的可能性的可靠方法。在我看来,Kaggle 并不像来自完全未经验证的来源的链接那么糟糕,但话又说回来,我必须先登录才能下载任何内容。请遵照建议here下次以易于使用的方式提供数据。

关于r - 使用 fct_infreq() 更改图上因子的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52018079/

相关文章:

r - 基于列的分组创建数据帧子集的向量

r - 在 PostgreSQL 上运行 PL/R 时,R 可以处理比 RAM 更大的数据吗?

r - 创建循环以向列添加标签 : library(Hmisc)

r - 向ggplot添加水平线

r - 将预测的时间序列与 R 中的原始序列重叠

r - 绘制 x 轴 HH :mm:SS for POSIXct

r - 更改 qplot (R) 中的图例大小

r - 使用 ggplot2 进行元编程

r - 在 R-cran 中用线条、点或类似颜色填充箱线图

r - 如何使用ggplot2绘制带有类别变量的线?