在ggplot中生成配对堆积条形图(仅在某些变量上使用position_dodge) [英] Generate paired stacked bar charts in ggplot (using position_dodge only on some variables)

查看:2016
本文介绍了在ggplot中生成配对堆积条形图(仅在某些变量上使用position_dodge)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我希望使用 ggplot2 成对生成一组堆积条,如下所示:

I'm hoping to use ggplot2 to generate a set of stacked bars in pairs, much like this:

示例数据:

With the following example data:

df <- expand.grid(name = c("oak","birch","cedar"),
        sample = c("one","two"),
        type = c("sapling","adult","dead"))
df$count <- sample(5:200, size = nrow(df), replace = T)

x轴表示树的名称,每个树种有两个小节:一个用于样本一,另一个用于样本二。然后每个栏的颜色应该由类型确定。

I would want the x-axis to represent the name of the tree, with two bars per tree species: one bar for sample one and one bar for sample two. Then the colors of each bar should be determined by type.

以下代码根据类型生成带颜色的堆叠条:

The following code generates the stacked bar with colors by type:

ggplot(df, aes(x = name, y = count, fill = type)) + geom_bar(stat = "identity")

下面的代码通过示例生成闪避的条形图:

And the following code generates the dodged bars by sample:

ggplot(df, aes(x = name, y = count, group = sample)) + geom_bar(stat = "identity", position = "dodge")

但是我无法避开其中的一个分组(样本),并且堆积另一个分组(类型):

But I can't get it to dodge one of the groupings (sample) and stack the other grouping (type):

ggplot(df, aes(x = name, y = count, fill = type, group = sample)) + geom_bar(stat = "identity", position = "dodge")

推荐答案

在x轴上放置 sample name 的交互,然后调整x轴的标签。

One workaround would be to put interaction of sample and name on x axis and then adjust the labels for the x axis. Problem is that bars are not put close to each other.

ggplot(df, aes(x = as.numeric(interaction(sample,name)), y = count, fill = type)) + 
  geom_bar(stat = "identity",color="white") +
  scale_x_continuous(breaks=c(1.5,3.5,5.5),labels=c("oak","birch","cedar"))

另一种解决方案是使用facets name sample 作为x值。

Another solution is to use facets for name and sample as x values.

ggplot(df,aes(x=sample,y=count,fill=type))+
  geom_bar(stat = "identity",color="white")+
  facet_wrap(~name,nrow=1)

这篇关于在ggplot中生成配对堆积条形图(仅在某些变量上使用position_dodge)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆