在ggplot中着色堆积条形图:如果我的填充变量由多个列组成,该怎么办?

时间:2013-07-23 20:20:33

标签: r ggplot2 bar-chart

我对ggplot很新,我正在尝试创建刻面堆积条形图。我正在研究不同菌株在几个时间点的相对丰度。以下是我的数据的简化版本:

ID  Tmpt    Rep B1  B2  B3
A1  1       1   .2  .4  .4
A2  1       2   .1  .4  .5
A3  2       1   .2  .45 .35
A4  2       2   .2  .3  .5
A5  3       1   .15 .5  .35
A6  3       2   .2  .5  .3

我的实际数据有更多的时间点(Tmpt),reps和细菌菌株(变量B1-B3),但这是相同的格式。 ID只是样品的任意标签,B1中的值表示细菌B1中培养皿的百分比(同样适用于B2和B3)。

我想制作刻面堆积条形图(由rep刻面),其中每个堆积条形图每个时间点有一个条形(所以在这个例子中,将有2个小平面,每个小平面有3个小节)。我想要根据B1,B2和B3的覆盖百分比对每个条形图进行着色(这样就会有3种颜色,每种细菌一种颜色)。我之前使用过geom_bar(),我想我可以弄清楚如何制作切面条形图,但我不知道如何着色它。我在ggplot中看到的aes(fill = mycondition)的所有示例都包含数据集中单个列中的所有类别,而不是多列。如果没有完全重新格式化我的数据,有没有办法做到这一点?

1 个答案:

答案 0 :(得分:2)

没有。如果图中的每个项目只代表一个数据项,ggplot效果最佳。让自己熟悉reshape2reshape软件包,数据重新格式化将不会成为问题。

library(reshape2)
data.m <- melt(data, id.vars=c("ID", "Tmpt", "Rep"))

您应该可以直接使用data.m以您需要的方式绘制数据:

ggplot(data.m, aes(color=variable)) + facet_wrap(~Rep) + geom_bar(...)

另请参阅以下稍微相关的问题:Repeat values to multiple plots when faceting