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

时间:2018-08-25 14:07:46

标签: r ggplot2

因此,我从足球比赛中得到了一个包含足球运动员的姓名,国籍和统计数据的数据框。我想在每个国家/地区中找到最佳的10个玩家,对他们的“特殊”统计数据求和,选择总和最高的前10个国家/地区,然后进行绘图。

containers

当我用以下方式绘制它时:

 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()从“ fifka”创建了df“ fifka3”,而df“ fifka3”仍然包含如下所示的其他因素?我该怎么做才能在group_by()函数中更改顺序?

ggplot()

2 个答案:

答案 0 :(得分:0)

尝试在levels中使用factor参数来更改因子的顺序:

fifka3 <- fifka %>% group_by(Nationality) %>% 
  top_n(n = 10, wt=Special) %>% summarize(Top10 = sum(Special)) %>% top_n(10)

fifka3$Nationality<-factor(fifka3$Nationality,levels = fifka3$Nationality[order(fifka3$Top10,decreasing = T)])

library(ggplot2)
ggplot(data=fifka3, aes(x=Nationality,y=Top10)) +
  geom_bar(stat="identity")

The result should be like this

答案 1 :(得分:0)

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的建议以易于使用的方式提供数据。