2013-07-22 65 views
4

我正試圖將一個系統發育樹排列到顯示一組相關生物體的生理數據的圖上。像下面的圖片。這是從2個獨立的圖形放在一起。我想它可以完成這項工作,但我希望創建一個單一的圖像,我認爲這將更容易格式化爲一個文檔。我能夠使用ggplot2生成我想要的圖形,並使用ape導入樹形圖。我認爲應該有一種方法將樹保存爲圖形對象,然後使用gridExtra中的gridarrange函數將其與圖形進行排列。問題是,猿不會讓我的樹保存爲圖形對象,例如,將系統發育樹與x,y圖結合

p2<-plot(tree, dir = "u", show.tip.label = FALSE) 

只繪出了樹,當你調用P2它只是給出的參數列表。我想知道是否有人有任何提示。

謝謝!

enter image description here

+0

長相[與此類似(http://stackoverflow.com/questions/17370853/align-ggplot2-plots-vertically/17371177#17371177) – baptiste

+0

爲了澄清:您的頂部圖像來自ggplot,而系統發育樹是使用基本繪圖系統繪製的。所以你想在同一個圖像上結合ggplot和base plot。我認爲如果有的話,答案會比它的價值更麻煩。 –

+0

頂部圖像來自猿猴的ggplot2樹。如果有一種將樹導入ggplot2的方式,那很好,我只是沒有意識到它。 – user2055130

回答

3

我不知道這是否會與gtable工作從CRAN

require(ggplot2) 
require(gridBase) 
require(gtable) 

p <- qplot(1,1) 
g <- ggplotGrob(p) 

g <- gtable_add_rows(g, unit(2,"in"), nrow(g)) 
g <- gtable_add_grob(g, rectGrob(), 
        t = 7, l=4, b=7, r=4) 

grid.newpage() 
grid.draw(g) 

#grid.force() 
#grid.ls(grobs=F, viewports=T) 
seekViewport("layout.7-4-7-4") 
par(plt=gridPLT(), new=TRUE) 
plot(rtree(10), "c", FALSE, direction = "u") 
upViewport() 

enter image description here

+0

這工作得很好,但你知道如何去除底部桌子周圍的黑色邊框嗎? – user2055130

+0

不確定,但您可以隨時將rectGrob設置爲使用透明顏色 – baptiste

+0

我試過「g < - gtable_add_grob(g,rectGrob(gp = gpar(fill =」white「), t = 7,l = 4,b = 7,r = 4))「 但出現錯誤。對不起,我對gtable – user2055130

1

首先我想對於解決大多數他所有的多個答案感謝baptiste我的問題與ggplot2。

秒,我有一個類似的問題,其中包括一個一棵樹與ggplot2獲得的熱圖。巴蒂斯特做了我的一天,雖然我的簡化版本可以提供幫助。 我只使用了對我有用的東西(刪除了gg_rows的添加)。

library(ape) 
tr <- read.tree("mytree.tree") 
# heat is the heatmap ggplot, using geom_tile 
g <- ggplotGrob(heat) 
grid.newpage() 
grid.draw(g) 
# use oma to reduce the tree so it fits 
par(new = TRUE, oma = c(5, 4, 5, 38)) 
plot(tr) 
nodelabels(tr$node.label, cex = 1, frame = "none", col = "black", adj = c(-0.3, 0.5)) 
add.scale.bar() 
# use dev.copy2pdf and not ggsave 
dev.copy2pdf(file = "heatmap_prob.pdf") 

結果是這裏 heatmaptree