根据多个条件对ggplot中的离散x轴进行排序

时间:2019-06-03 02:19:48

标签: r

我想创建一个可视化图像,以有序堆积条形图显示600个教室的种族组成。 X是教室,会有600个垂直堆叠的横条,每个种族的百分比用不同的颜色表示。它将进行排序,以便您可以大致了解多少教室具有一定的组成。

问题是,我似乎找不到一种基于多个变量对x轴进行排序的方法(按种族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 :(得分:0)

一种选择是使用函数gglot直接在数据集中调用arrange()之前要进行的排序(这样您可以根据几个变量进行排序),然后在从forçats库中aes()绘制函数fct_inorder(),以保持与数据集中的顺序相同。