2013-07-30 42 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