我有一张桌子,我想用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)
我不太确定如何从三个因素中获得数量。
我想要一个类似于下面的图,我粗略地在油漆中起草。 facet是位置,我只为Loc1制作了条形图。
答案 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)
或者facet_grid
,我认为它看起来更好但与你的草图不太匹配:
df2 <- melt(df1, id.vars=c("Loc", "Type"))
ggplot(data=df2, aes(x=value, fill=Type)) +
geom_bar() + facet_grid(Loc ~ variable)
最后,借用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)
如果你想为每个位置实际拥有单独的面板,我认为你必须使用生成自己的网格视口和凹凸。有一个包ggextra
做了这样的事情,但它似乎不适用于最新的R版本。