在ggplot中生成配对堆积条形图(仅在某些变量上使用position_dodge) [英] Generate paired stacked bar charts in ggplot (using position_dodge only on some variables)
问题描述
我希望使用 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屋!