ggplot2 - 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 个可能的级别。这是我能想到的唯一区别。以前有人遇到过这个问题吗?它一直让我发疯!我不知道这里发生了什么!
解决方案
当您堆叠条形时,您正在添加它们的值。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 行。选择一个合适的样本来说明问题。
推荐阅读
- javascript - 使用扩展运算符使用动态值将对象添加到数组
- flutter - 方法 'dispose' & jumptopage 不能被无条件调用,因为接收者可以是 'null'
- android - 如何用 WebView 填充 AlertDialog?
- java - 在 Gradle 中禁用依赖解析
- google-sheets - Google 工作表错误 - SUMIFS 的数组参数大小不同
- python - 在 for 循环中使用 .split() 函数引用自己的参数
- c# - 如何使用 Windows App SDK 在 WinUI 3 桌面中获取 DispatcherQueue
- terraform - 如何通过 terraform 跨区域部署 AWS 资源?
- javascript - Raspberry-pi 上我的实际用户的 Pigpio 权限被封锁
- r - 用“madness”计算偏导数