当需要刻面时,控制ggplot的geom_col中的堆叠顺序

我已经设置了因子级别,以控制堆叠条形图在ggplot的geom_col中出现的顺序。然后,我想对条形图附加一个方面。当我在geom_col的aes中添加“组”时,它将丢失条形的顺序。

这个最小的例子导致了问题,尽管我希望在削减问题上没有遗漏任何关键的复杂因素。我故意在不直观的排名中命令cyl的级别。在第一个图表中,排名很荣幸。在多面版本中不是。

  library(ggplot2)
  m.cars <- mtcars
  m.cars$cyl <- factor(m.cars$cyl,levels = c(6,8,4))
  m.cars$carb <- factor(m.cars$carb)
  m.cars$vs <- factor(m.cars$vs,levels = c(1,0)) 
  ggplot(data = m.cars) +
     geom_col(aes(x = gear,y = mpg,fill = cyl))

当需要刻面时,控制ggplot的geom_col中的堆叠顺序

  ggplot(data = m.cars) +
     geom_col(aes(x = gear,fill = cyl,group = vs)) +
     facet_wrap(~vs)

当需要刻面时,控制ggplot的geom_col中的堆叠顺序

我认为未设置因子水平时分类变量的默认排序是字母顺序的。在我的数据中,与示例中的cyl等效的堆栈排序变量的值已经是字符。这不是最佳选择,但我尝试更改基本数据,以使所需的堆叠顺序按字母顺序排列。与此示例类似,我将档位从4、6和8更改为“ b4”,“ a6”和“ c8”。没关系。

这个问题与Ordering of faceted stacked barplot with ggplot2有一些相似之处,但是他们努力控制的顺序是构面的顺序,而对我来说,这是钢筋堆叠的顺序。

我可能不得不求助于ggplot bar plot with facet-dependent order of categories的想法,但我希望改用构面。 “做到这一点的唯一方法是制作单独的图并使用来自gridExtra包的grid.arrange。但是我同意这通常不会产生非常好的图。”我有很多传说中的并发症,等等。

zhangyukexin 回答:当需要刻面时,控制ggplot的geom_col中的堆叠顺序

从您的代码中删除group = ...,它应该可以正常工作。

ggplot(data = m.cars) +  
  geom_col(aes(x = gear,y = mpg,fill = cyl)) +
  facet_wrap(~vs)

引入构面也不需要添加匹配组。 (您会看到geom_boxplot中经常使用的分组,并且可能会告诉您何时何地使用这些分组。)

本文链接:https://www.f2er.com/3088630.html

大家都在问