R / ggplot中的Barplot有多种因素

时间:2014-01-06 15:43:51

标签: r ggplot2

我有一张桌子,我想用ggplot2制作一个情节,到目前为止我还没有成功。 我准备了一个看起来像这样的简化表

df1<-data.frame(Loc=c(rep("L1",5),rep("L2",3),rep("L3",4)),
Type=c(rep("T1",3),rep("T2",2),"T1","T2","T2","T1","T1","T2","T2"),
       y2009=rep("A",12),y2010=c("A","B","A","A","A","A","B","B","A","A","B","B"),
       y2011=c("B","B","B","A","B",rep("B",4),"A","B","B"))
df1

Loc有3个位置。每个位置有2种类型的样本T1或T2。他们从2009年开始作为A,随着时间的推移,有些人成为B.因此,到2011年,有很多B。

这是我到目前为止的数字

ggplot(df1,aes(x=Type)) + geom_bar()+facet_grid(~Loc)
ggplot(df1,aes(x=y2009,fill=Type)) + geom_bar(position="dodge")+facet_grid(~Loc)

enter image description here enter image description here

我不太确定如何从三个因素中获得数量。

我想要一个类似于下面的图,我粗略地在油漆中起草。 facet是位置,我只为Loc1制作了条形图。 enter image description here

1 个答案:

答案 0 :(得分:16)

尝试多层次方面:

df2 <- melt(df1, id.vars=c("Loc", "Type"))
ggplot(data=df2, aes(x=value, fill=Type)) + 
  geom_bar() + facet_wrap(~ Loc + variable, nrow=1)

enter image description here

或者facet_grid,我认为它看起来更好但与你的草图不太匹配:

df2 <- melt(df1, id.vars=c("Loc", "Type"))
ggplot(data=df2, aes(x=value, fill=Type)) + 
  geom_bar() + facet_grid(Loc ~ variable)

enter image description here

最后,借用from this post,你可以尝试用颜色更好地区分位置(显然颜色方案可以使用一些工作,但你明白了):

df2 <- melt(df1, id.vars=c("Loc", "Type"))
ggplot(data=df2, aes(x=value, fill=Type)) + 
  geom_rect(aes(fill=Loc),xmin =-Inf,xmax=Inf,ymin=-Inf,ymax=Inf,alpha = 0.1) +
  geom_bar() +
  facet_wrap(~ Loc + variable, nrow=1)

enter image description here

如果你想为每个位置实际拥有单独的面板,我认为你必须使用生成自己的网格视口和凹凸。有一个包ggextra做了这样的事情,但它似乎不适用于最新的R版本。