Как изменить порядок Facet_wrap на основе двух переменных - PullRequest
1 голос
/ 04 июня 2019

Мне нужно сделать гистограмму на основе двух переменных (points и type) с заливкой.

Ниже приведен минимальный пример, я хотел бы видеть очки ранжирование по защитным очкам и ранжирование по точкам в качестве защитника или форварда .

Я пытался ~reorder(names, -c(type, points)), но это не работает.

    name <- c("James Harden","James Harden","Lebron James","Lebron James","Lebron James","Kawhi Leonerd","Kawhi Leonerd","Klay Thompson","Steph Curry","Kevin Durant","Kevin Durant","Chris Paul","Chris Paul")
    team <- c("HOU","OKC","LAL","MIA","CLE","SAS","TOR","GSW","GSW","GSW","OKC","HOU","LAC")
    points <- c(2000,12000,2000,10000,20000,7000,2000,14000,20000,6000,18000,4000,14000)
    type <- c("G","G","F","G","F","G","G","G","G","F","F","G","G")
    nba <- data.frame(name,team,points,type)
    nba <- nba %>% arrange(desc(type))
    ggplot(nba, aes(x = type, y = points, fill = team)) +
      geom_bar(stat = 'identity', position = 'stack', color = 'black') +
      facet_wrap(~reorder(name,-points),  ncol = 1, strip.position = "top") +
      coord_flip() + theme_minimal() +
      labs(x = "players", y = "points", title = "Rank by points as Guard")

Если он ранжируется по очкам в качестве охранника, я бы хотел видеть Steph Curry на вершине, Chris Paul на секунду, James Harden и Klay на третьем, Lebron на пятом, Kawhi на шестом и KD внизу.

Если он ранжируется по очкам как защитник или нападающий, я бы хотел видеть Lebron сверху, KD секунду и так далее, и так далее.

1 Ответ

1 голос
/ 04 июня 2019

Вы можете отсортировать его по точкам в качестве охраны, добавив вспомогательный столбец. Смотри ниже;

library(ggplot2)
library(dplyr)

nba %>% 
 mutate(guardpoints = points * (type=="G")) %>% 
  ggplot(aes(x = type, y = points, fill = team)) +
  geom_bar(stat = 'identity', position = 'stack', color = 'black') +
  facet_wrap(~reorder(name, -guardpoints, sum),  ncol = 1, strip.position = "top") +
  coord_flip() + theme_minimal() +
  labs(x = "players", y = "points", title = "Rank by points as Guard")

nba %>% 
  ggplot(aes(x = type, y = points, fill = team)) +
  geom_bar(stat = 'identity', position = 'stack', color = 'black') +
  facet_wrap(~reorder(name, -points, sum),  ncol = 1, strip.position = "top") +
  coord_flip() + theme_minimal() +
  labs(x = "players", y = "points", title = "Rank by points")

Создано в 2019-06-04 пакетом Представ (v0.3.0)

...