Как отобразить отображение всей панели в ggplot - PullRequest
1 голос
/ 22 мая 2019

Отображение 10 баров на основе оценки.

Я хочу отобразить 10 баров на основе индивидуальной шкалы. Поскольку CH Gayle и AB de Villiers повторяются дважды, я получаю только 8 тактов. Но я хочу показать 10 баров на основе оценки в порядке убывания.

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 и batsman, чтобы получить 10 баров.

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) %>%
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")

Приведенный выше код дает мне только 8 столбцов в алфавитном порядке. Как мне сделать так, чтобы отображалось 10 баров?

Ответы [ 2 ]

0 голосов
/ 22 мая 2019

Следующее является хаком, но оно работает.
Хитрость заключается в том, чтобы вставить пробел " " в конце дублированного 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)
0 голосов
/ 22 мая 2019

Что если вы попробовали что-то подобное?С вашим кодом, ggplot2 группирует их вместе, потому что ось X равна batsman, и это буквально говорит вам об этом.Но что, если вы сделали ось X какой-то уникальной вещью, не связанной с batsman или individual_score?

Я сделал это ниже, присвоив каждой строке произвольный уникальный идентификатор.Я использовал 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 теперь является уникальным идентификатором, поэтому она обрабатывает каждую запись отдельно.Но тогда вы должны пометить ось с игроками с битой, что я и сделал, используя аргумент labels scale_x_discrete().Имеет смысл?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...