如何显示显示ggplot中的所有条

时间:2019-05-22 13:36:26

标签: r

根据得分显示10条。

我想显示基于个人得分的10条。由于CH Gayle和AB de Villiers被重复两次,所以我只得到8个小节。但是我想根据得分以降序显示10个小节。

b

我尝试按降序重新排序,但是它不起作用。我还尝试过batsman individual_score CH Gayle 175 BB McCullum 158 AB de Villiers 133 RR Pant 130 AB de Villiers 129 CH Gayle 128 M Vijay 127 DA Warner 126 V Sehwag 122 SR Watson 121 fill = score来获得10小节。

batsman

上面的代码仅按字母顺序给我8条。如何使它显示10条?

2 个答案:

答案 0 :(得分:0)

如果您尝试过类似的操作怎么办?在您的代码中,ggplot2将它们分组在一起,因为x轴是batsman,这确实使您着迷。但是,如果您将x轴设为与batsmanindividual_score无关的独特事物呢?

我在下面通过给每一行一个任意的唯一ID来完成此操作。我使用了row_number(),所以它们顺理成章。然后,我将它们变成一个因子(而不是将其保留为数字),以便它与刻度很好地配合。

library(tidyverse)

highest_individual_score <- innings %>%
  group_by(match_id, batsman) %>%
  summarize(individual_score = sum(batsman_runs)) %>%
  arrange(desc(individual_score)) %>%
  ungroup() %>%
  top_n(10, individual_score) %>% 
  mutate(id = as.factor(row_number()))

然后,我对您的ggplot2代码本身进行了一些小的更改:

highest_individual_score %>%
  ggplot(aes(x = id, y = individual_score, fill = batsman))+
  geom_bar(stat = "identity", show.legend = FALSE)+
  scale_x_discrete(
    labels = highest_individual_score$batsman,
    name = "Batsman"
  ) +
  theme(axis.text.x = element_text(angle = 90))+
  labs(y = "Individual Score", title ="Top 10 highest 
       individual scorer")

从本质上讲,x轴现在是唯一的ID,因此它分别处理每个记录。但是然后您必须用板球手重新标记轴,我使用labels的{​​{1}}参数来完成。有道理吗?

答案 1 :(得分:0)

以下是骇客,但可以使用。
诀窍是在复制的" "的末尾粘贴空白batsman。然后转换为factor。像这样,会有所有不同的值,但空白不会出现。

library(dplyr)
library(ggplot2)

df1 %>%
  mutate(batsman = as.character(batsman),
         batsman = ifelse(duplicated(batsman), paste0(batsman, " "), batsman),
         batsman = factor(batsman)) %>%
  ggplot(aes(x= batsman, y = individual_score,fill = batsman)) +
  geom_bar(stat= "identity", show.legend = FALSE) +
  theme(axis.text.x = element_text(angle = 90)) +
  labs(x = "Batsman", 
       y = "Individual Score", 
       title ="Top 10 highest individual scorer")

enter image description here

数据。

df1 <- read.table(text = "
batsman        individual_score   
'CH Gayle'    175
'BB McCullum' 158
'AB de Villiers'  133
'RR Pant' 130
'AB de Villiers'  129
'CH Gayle'    128
'M Vijay' 127
'DA Warner'   126
'V Sehwag'    122
'SR Watson'   121
", header = TRUE)