Как отобразить всю полосу в ggplot

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

Я хочу отобразить 10 баров на основе Individual_score. Поскольку 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 полос?

Не имеет прямого отношения к вопросу, но я просто хотел сообщить вам о geom_col(), который является оболочкой для geom_bar(stat = 'identity), его использование может избавить вас от ввода

Haezer 22.05.2019 16:16
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
1
33
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Да спасибо. Это имеет смысл. Один вопрос. Нужно ли запускать ggplot отдельно. Я пытался подключить его после мутации, это дает мне ошибку, но работа отдельно, как указано выше, работает нормально.

Learner 22.05.2019 17:07

Это потому, что мой аргумент «labels» относится к «highest_individual_score$batsman», но «highest_individual_score» существует только из-за промежуточного шага. Там могут быть способы обойти это.

Benjamin 22.05.2019 17:39

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

Этот тоже работает. Спасибо за информативный хак.

Learner 22.05.2019 17:08

Другие вопросы по теме