在不使用构面的条形图中对条形图进行分组

时间:2014-05-19 17:49:30

标签: r ggplot2 geom-bar

我想根据另一个因子变量中的值对堆积的条形图中的条形图进行分组。但是,我想在不使用方面的情况下这样做。

my data in long format

我想根据afk变量对堆积的条形图进行分组。正常的堆积条形图可以使用:

ggplot(nl.melt, aes(x=naam, y=perc, fill=stemmen)) +
  geom_bar(stat="identity", width=.7) +
  scale_x_discrete(expand=c(0,0)) +
  scale_y_continuous(expand=c(0,0)) +
  coord_flip() +
  theme_bw()

给出了一个alfabetically有序的barplot: enter image description here

我尝试使用x=reorder(naam,afk)中的aes对其进行分组。但那没用。使用group=afk也没有达到预期的效果。

任何想法如何做到这一点?

3 个答案:

答案 0 :(得分:3)

reorder应该有效,但问题是你正试图通过一个因素重新排序。您需要明确说明如何使用该信息。你可以使用

nl.melt$naam <- reorder(nl.melt$naam, as.numeric(nl.melt$afk))

nl.melt$naam <- reorder(nl.melt$naam, as.character(nl.melt$afk), FUN=min)

取决于您是希望按afk的现有级别排序,还是希望按afk的级别按字母顺序排序。

运行并重新运行ggplot代码后,我得到了

updated bar chart

答案 1 :(得分:2)

@ MrFlick的方法的替代方法(基于@CarlosCinelli链接的答案)是:

ggplot(nl.melt, aes(x=interaction(naam,afk), y=perc, fill=stemmen)) +
  geom_bar(stat="identity", width=.7) +
  scale_x_discrete(expand=c(0,0)) +
  scale_y_continuous(expand=c(0,0)) +
  coord_flip() +
  theme_bw()

给出: enter image description here

答案 2 :(得分:-1)

R倾向于将级别的顺序视为数据的属性而不是图的属性。在调用绘图命令之前尝试重新排序数据本身。尝试运行:

nl.melt$naam <- reorder(nl.melt$naam, nl.melt$afk)

然后运行您的ggplot代码。或者使用其他方式在naam中重新排序您的因子级别。