Generate paired stacked bar charts in ggplot (using position_dodge only on some variables)

谁都会走 提交于 2019-11-26 08:33:19

问题


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

\"stacked

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)

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\")

\"enter

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\")

\"enter

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\")

\"enter


回答1:


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"))

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)



来源:https://stackoverflow.com/questions/21409850/generate-paired-stacked-bar-charts-in-ggplot-using-position-dodge-only-on-some

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!