首页 > 解决方案 > Rstudio 和 ggplot,堆积条形图:两个几乎相同的代码位,fct_reorder 与一个一起工作,而不是另一个?

问题描述

mcr_variant我写了这个,它通过条形图上的计数完美地重新排序了变量。

mcrxgenus %>%
  mutate(mcr_variant = fct_reorder(mcr_variant, count)) %>%
  ggplot( aes(fill=isolate_genus, y=count, x=mcr_variant)) +
  geom_bar(position="stack", stat="identity") +
  coord_flip() +
  labs(x="MCR variant", y="Count", fill="Isolate genus")

我写这个是为了以不同的方式显示相同的数据集。

mcrxgenus %>%
  mutate(isolate_genus = fct_reorder(isolate_genus, count)) %>%
  ggplot( aes(fill=mcr_variant, y=count, x=isolate_genus)) +
  geom_bar(position="stack", stat="identity")+
  coord_flip()+
  labs(x="Isolate genus", y="Count", fill="MCR variant")

它不会按计数重新排列我的条形图。我完全不知道发生了什么。在我看来,这应该没有任何理由。mcr_variant 和isolate_genus 都是分类变量。mcr_variant 有 12 个级别,isolate_genus 有 6 个可能的级别。这是我能想到的唯一区别。以前有人遇到过这个问题吗?它一直让我发疯!我不知道这里发生了什么!

标签: ggplot2geom-bar

解决方案


当您堆叠条形时,您正在添加它们的值。fct_reorder,默认情况下,取值的中位数。因此,如果 MCR VariantA的计数为 1、1、1、2、1,则其顺序将由中位数 1 确定,而其高度是计数的总和 6。同时,如果 MCR VariantB的计数为 2、3,它的顺序将是中位数 2.5,但它的总和是 5。

您需要fct_reorder使用sum,就像您的堆叠条形图一样。替换fct_reorder(isolate_genus, count)fct_reorder(isolate_genus, count, sum)

如果这不起作用,请共享一个可重现的数据样本,最好是dput这样保留类,并且所有内容都是可复制/粘贴的,例如dput(mcrxgenus[1:10, ])前 10 行。选择一个合适的样本来说明问题。


推荐阅读