Сортировать гистограмму с накоплением по значениям - PullRequest
0 голосов
/ 17 января 2019

Это отличается от существующих вопросов. Другие ответы указывают на перемещение целых баров в соответствии с указанным порядком. Я хотел бы отсортировать полученные столбцы по одному элементу в столбцах с накоплением.

Я создал гистограмму с накоплением в R. Это набор данных:

dput(Pitch_third)
structure(list(Team = c("Millwall", "Birmingham", "Sheffield United",
                        "Rotherham", "Middlesbrough", "Wigan", "Aston Villa", "Blackburn",
                        "Bolton", "Brentford", "Bristol City", "Leeds", "Preston", "Queens Park Rangers",
                        "Stoke", "Derby", "Ipswich", "Norwich", "West Bromwich Albion",
                        "Nottingham Forest", "Swansea", "Hull", "Reading", "Sheffield Wednesday"), 
               Own_3rd = c(0.25, 0.25, 0.25, 0.29, 0.27, 0.28, 0.28, 0.3, 
                           0.29, 0.28, 0.28, 0.3, 0.28, 0.3, 0.27, 0.28, 0.3, 0.29, 0.29, 
                           0.3, 0.31, 0.3, 0.3, 0.31), 
               Middle_3rd = c(0.41, 0.42, 0.43, 
                              0.4, 0.43, 0.42, 0.44, 0.41, 0.42, 0.42, 0.43, 0.42, 0.42, 0.42, 
                              0.45, 0.45, 0.43, 0.44, 0.44, 0.43, 0.44, 0.45, 0.45, 0.45), 
               Final_3rd = c(0.35, 0.33, 0.32, 0.31, 0.3, 0.3, 0.29, 0.29, 
                             0.29, 0.29, 0.29, 0.29, 0.29, 0.29, 0.28, 0.27, 0.27, 0.27, 
                             0.27, 0.26, 0.26, 0.25, 0.25, 0.25)), 
          row.names = c(NA, -24L), 
          class = "data.frame")

Затем из этих данных я создал табличку с именем Pitch_third. Затем построил это так:

Pitch_third %>%
gather(variable, value, Own_3rd:Final_3rd) %>% 
ggplot(aes(x = Team, y = value, fill = variable)) + 
geom_bar(position = "fill", stat = "identity") +
coord_flip()

Это результирующий сюжет:

Как я могу отсортировать график так, чтобы команды сортировались по переменной Final_3rd, а не по алфавиту?

Я пытался использовать arrange() для сортировки тиббла по Final_3rd, но я думаю, что gather() может с этим связываться.

Pitch_third <- arrange(Pitch_third, desc(Final_3rd))

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Я думаю, что вы уже проделали отличную работу и правильно поняли arrange, который должен быть помещен после gather. Тогда уловка может заключаться в том, чтобы получить новый коэффициент для Team с уровнями, отсортированными в соответствии со значениями "Final_3rd", а не в алфавитном порядке по умолчанию.

library(ggplot2)
library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(tidyr)

Pitch_third %>%
  gather(variable, value, Own_3rd:Final_3rd) %>% 
  arrange(variable, value) %>% 
  # Create a new factor, with its levels sorted according to Final_3rd
  mutate(team_f = factor(Team, levels = .[.$variable == "Final_3rd", "Team"])) %>% 
  # or
  # mutate(team_f = factor(Team, levels = filter(., variable == "Final_3rd") %>% .$Team)) %>%
  ggplot(aes(x = team_f, y = value, fill = variable)) +
  geom_bar(position = "fill", stat = "identity") +
  coord_flip()

Создано в 2019-01-17 пакетом Представление (v0.2.1)

0 голосов
/ 18 января 2019

Я полагаю, вы хотите это: this

Используя ваши данные как data

library(data.table)
library(tidyr)

data2 <- as.data.table(gather(data, variable, value, Own_3rd:Final_3rd))

team_levels <- unique(data2[, Team])[order(data2[variable == "Final_3rd", value])]

data2$Team2 <- factor(data2$Team, levels = team_levels)

ggplot(data = data2,
       aes(x = Team2, y = value, fill = variable)) +
  geom_bar(position = "fill", stat = "identity") +
  coord_flip()

Ответ основан на: Изменение порядка дискретной шкалы x

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