【问题标题】:ggplot2 - How to sort stackedbars based on categorical and numerical variablesggplot2 - 如何根据分类和数值变量对堆积条进行排序
【发布时间】:2020-09-21 04:09:55
【问题描述】:

我正在尝试创建一个堆叠的条形图,使用 ggplot2,按多个标准排序。这是我正在使用的数据框 -

my_df<-data.frame('sub_n'=c(rep(1,3),rep(2,3),rep(3,3),rep(4,3),rep(5,3)),'total'=c(1, 3, 3, 2, 1, 2, 1, 3, 3, 1, 3, 1, 3, 1, 3),'choice'=c(rep(c('a','b','c'),5)))

我最终希望拥有的是一个堆叠的条形图,根据“选择”的数量进行排序。具体来说,我想创建一个横向堆积图,顶部的条形图具有最高的选择“总”值==b,然后是具有最高选择值==c 的条形图,然后是通过具有最高“总”选择值的条形==a。

这是我迄今为止尝试做的 -

require(dplyr)
require(forcats)
my_df<-my_df %>% 
  arrange(choice, desc(total)) %>% 
  mutate(choice=fct_reorder(choice,total))
order_1<-unique(my_df$sub_n)
my_df$sub_n<-factor(my_df$sub_n, levels=order_1)
my_df <- my_df[order(my_df$sub_n),]
ggplot(data=my_df, aes(x=sub_n, y=total, fill=choice))+
  geom_bar(position="stack",stat="identity")+
  coord_flip()

我什至不确定我是否正确地解释了这一点,如果我可以添加其他内容以使其更清楚,请告诉我。

【问题讨论】:

    标签: r ggplot2 data-visualization stacked-chart


    【解决方案1】:

    在我看来,这个非常棘手。这是一种使用arrange 按条件排序,然后使用row_number() 设置排名的方法。感谢@akrun in this answer 的启发。

    我们可以使用pivot_wider 来轻松按每个变量排序。

    一旦我们建立了排名,我们可以重新加入数据并使用fct_reorder 重新排序因子,就像您在尝试中所做的那样。

    如果您想重新排序栏中的因素所在的位置,您可以使用fct_relevel

    library(dplyr)
    library(tidyr)
    library(forcats)
    library(ggplot)
    my_df %>%
      pivot_wider(names_from = "choice", values_from = "total") %>%
      arrange(desc(b),desc(c),desc(a)) %>% 
      mutate(rank = row_number()) %>%
      right_join(my_df,by = "sub_n") %>%
      mutate(sub_n = fct_reorder(as.factor(sub_n), desc(rank)),
             choice = fct_relevel(choice,c("a","c","b"))) %>%
    ggplot(aes(x=sub_n, y=total, fill=choice))+
      geom_bar(position="stack",stat="identity")+
      scale_fill_manual(values = c(b = "#00BA38", c = "#619CFF", a = "#F8766D")) + 
      coord_flip()
    

    【讨论】:

    • 谢谢!这很有帮助。但是有没有一种方法可以将它可视化,使 b(绿色)在每个主题中首先出现,然后是 c,然后是 a?这是一个来自更大数据集的样本数据集,如果有人更倾向于选择一个选项而不是另一个选项,我正在尝试从本质上可视化模式。
    猜你喜欢
    • 1970-01-01
    • 2019-08-30
    • 2011-11-01
    • 1970-01-01
    • 2018-01-21
    • 2015-05-04
    • 1970-01-01
    • 2021-10-10
    • 2012-09-10
    相关资源
    最近更新 更多