R 按填充子集排列堆叠条形图中的x轴

R 按填充子集排列堆叠条形图中的x轴,r,ggplot2,R,Ggplot2,例如,关于如何在带有ggplot2的条形图中按频率排列x轴,存在多个问题。然而,我的目标是通过填充子集的相对频率在堆叠条形图中的X轴上排列类别。例如,我想按照变量z中类别B的百分比对x轴进行排序 这是我第一次尝试只使用ggplot2 库(ggplot2) 图书馆(tibble) 图书馆(比例尺) 系数1% (x,z)%>% 计数()%>% 排列(z,n)%>% 排列(-B)%>% 聚集(z,n,-x)%>% ggplot(aes(x=重新排序(x,n),y=n,填充=z))+ 几何图形栏(st

例如,关于如何在带有
ggplot2
的条形图中按频率排列x轴,存在多个问题。然而,我的目标是通过填充子集的相对频率在堆叠条形图中的X轴上排列类别。例如,我想按照变量
z
中类别
B
的百分比对x轴进行排序

这是我第一次尝试只使用ggplot2

库(ggplot2)
图书馆(tibble)
图书馆(比例尺)
系数1%
(x,z)%>%
计数()%>%
排列(z,n)%>%
排列(-B)%>%
聚集(z,n,-x)%>%
ggplot(aes(x=重新排序(x,n),y=n,填充=z))+
几何图形栏(stat=“identity”,position=“fill”)+
连续缩放(标签=百分比)


为了不依赖于dplyr/tidyr创建的数据帧中的顺序,我更喜欢只使用ggplot的解决方案。然而,我对任何事情都持开放态度

如果要按绝对频率排序:

lvls <- names(sort(table(data[data$z == "B", "x"])))
lvls <- names(sort(tapply(data$z == "B", data$x, mean)))

使用
tidyverse
的解决方案是:

data %>% 
  mutate(x = forcats::fct_reorder(x, as.numeric(z), fun = mean)) %>% 
  ggplot(aes(x, fill = z)) +
    geom_bar(position = "fill") +
    scale_y_continuous(labels = percent)

我已经指定了这个问题,这个答案很有用,但主要是我想按相对频率排序,而不是绝对值。@docendodiscimus我已经指定了这个问题,主要是我感兴趣的相对频率。谢谢
data %>% 
  mutate(x = forcats::fct_reorder(x, as.numeric(z), fun = mean)) %>% 
  ggplot(aes(x, fill = z)) +
    geom_bar(position = "fill") +
    scale_y_continuous(labels = percent)