2013-07-30 40 views
2

在我试图绘制的数据中,每个样本属于几个组中的一个,它们将绘制在它们自己的网格上。我正在绘制每个样本的堆积条形图,这些样本将按照越来越多的序列进行排序,这是每个样本的id属性。ggplot2堆叠的条形图,格式和网格

目前,小区(有一些随机数据)看起来是这样的: (因为我没有要求的10代表图片,我在这里将它链接) http://i.stack.imgur.com/A9hr2.png

有几件事情我需要完成。我不知道从哪里开始。

  1. 我希望酒吧不要放在其相应的nseqs值,而是按照升序nseqs顺序相邻放置。
  2. 我不希望每个网格具有相同的比例。一切都需要贴身贴合。

我试图设置尺寸和大小为facet_grid free_x,但这会导致一个未使用的参数错误。我认为这与我无法正确加载秤库的事实有关(它一直说不可用)。与绘图交易

代码:

ggfdata <- melt(fdata, id.var=c('group','nseqs','sample')) 
p <- ggplot(ggfdata, aes(x=nseqs, y=value, fill = variable)) + 
     geom_bar(stat='identity') + 
     facet_grid(~group) + 
     scale_y_continuous() + 
     opts(title=paste('Taxonomic Distribution - grouped by',colnames(meta.frame)[i])) 

回答

0

试试这个:

update.packages() 
## I'm assuming your ggplot2 is out of date because you use opts() 
## If the scales library is unavailable, you might need to update R 

ggfdata <- melt(fdata, id.var=c('group','nseqs','sample')) 
ggfdata$nseqs <- factor(ggfdata$nseqs) 
## Making nseqs a factor will stop ggplot from treating it as a numeric, 
## which sounds like what you want 

p <- ggplot(ggfdata, aes(x=nseqs, y=value, fill = variable)) + 
    geom_bar(stat='identity') + 
    facet_wrap(~group, scales="free_x") + ## No need for facet_grid with only one variable 
    labs(title = paste('Taxonomic Distribution - grouped by',colnames(meta.frame)[i])) 
+0

这个工作很完美!我正在运行R的旧版本。将nseqs列更改为一个因子正是我所需要的。 现在情节看起来好多了。 链接:http://i.imgur.com/PilFunl.png 谢谢! – Nik

+0

但仍然有问题。当存在具有相同nseqs的样本时,它们会合并并堆叠在一起。有没有办法避免这种情况? – Nik

+0

@Nik想到的两件事情是1.切换回'facet_grid'并使用'facet_grid(sample〜group)',如果你通常有多个样本(确保'sample'是一个因素! )或2.使用(ggfdata,paste0(nseqs,“。”,“sample”))'创建一个新列ggfdata $ nseqs.sample < - 并使用该列而不是'nseqs'。 – Gregor