Сортировка дискретной оси x в ggplot по нескольким критериям - PullRequest
1 голос
/ 03 июня 2019

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

Проблема в том, что я не могу найти способ упорядочить ось х на основе нескольких переменных (сортировать по расе 1, затем расе, 2 и т. Д.).

Вот некоторый воспроизводимый код с тем, что я пробовал.

teacher <- c(rep("a", 6), rep("b", 10), rep("c", 6))
studentrace <- c(rep("blk", 3), rep("white", 6), rep("latinx", 3), 
rep("blk", 7), rep("white", 3))
my.df <- data.frame(teacher, studentrace)

library(dplyr)
bars <- my.df %>%
  group_by(teacher, studentrace) %>%
  summarise(n=n()) %>%
  mutate(percent=n/sum(n))

library(ggplot2)
ggplot(bars, aes(x=teacher, y=percent)) +
  geom_col(aes(fill=studentrace))

#best solution so far, but won't sort using multiple variables
ggplot(bars, aes(x=reorder(teacher, PERCENTWHITE), y=percent)) +
  geom_col(aes(fill=studentrace))

#where percent white is a variable I merged into my longform dataset

Вот что я получил ... но я хочу иметь возможность сортировать по x, затем y, затем z ... (https://drive.google.com/file/d/1zDX5eRGZlo2vf33WNlz74ybWSuaxO8jp/view?usp=sharing)

Спасибо !!

enter image description here

1 Ответ

0 голосов
/ 03 июня 2019

Один из вариантов - сделать порядок, который вы хотите, прежде чем вызвать gglot, прямо в вашем наборе данных, с помощью функции arrange() (таким образом, вы можете отсортировать по нескольким переменным), а затем использовать в aes() изваш ggplot функция fct_inorder() из библиотеки forçats , чтобы сохранить тот же порядок, что и в вашем наборе данных.

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