2013-08-23 15 views
1

我試圖在一個頁面上放置多個treemaps。每個樹圖都是針對數據的一個子集,並且一次全部查看它們會很有用。以下代碼爲每個子集創建一個樹形圖,但它們都在它們自己的頁面上。具有縮放功能的單個頁面上的多個R treemaps

問題1)有沒有辦法將所有的treemaps放在一個頁面上? 問題2)有沒有一種方法可以縮放每個樹形圖的整體大小,使其變得更大,更小一些?

library(treemap) 
library(plyr) 

numSubsets = sapply(df[myIndexColumn], function(x) length(unique(x))) 
par(mfrow=c(1, numSubsets)) 
do_treemap <- function(mySubset) 
{ 

    t <- paste("Subset Number",mySubset$subset_num[1]) 
    treemap(mySubset, index=c("Level 1","Level 2"), vSize="sizeVar", vColor="colorVar", title=t) 
} 

ddply(df, .variables=c("subset_num"), .fun=do_treemap) 
+0

此主題在這裏討論:http://stackoverflow.com/questions/15000525/how-to-plot-grid-plots-on-a-same-page/15001309#15001309但另一個問題是當你使用'你正在使用'base'圖形和'treemap'使用'grid'圖形,而這兩者通常不兼容。 –

回答

2

樹形圖函數接受一個「vp」參數,它是一個網格視口。

grid.newpage() 
grid.rect() 
pushViewport(viewport(layout=grid.layout(3, 1))) 


do_treemap <- function(ind){ 
    vp <- viewport(layout.pos.col=1, layout.pos.row=ind) 
    pushViewport(vp) 
    treemap(business, index=c("NACE1", "NACE2", "NACE3"), vSize="turnover", type="index",vp=vp) 
    popViewport() 
    popViewport() #treemap doees not seem to pop corretly 
    popViewport() #and one more! 
} 

lapply(1:3, do_treemap) 
1

感謝您的問題和Ido,感謝您的正確答案。

確實有一個小bug需要兩個額外的popViewports。除此之外,你不需要推動vp(並在之後彈出)。該bug在當前的github版本中得到修復。

require(grid) 
grid.newpage() 

data(business) 
numVars <- c("turnover", "turnover.prev", "employees", "employees.prev") 

pushViewport(viewport(layout=grid.layout(length(numVars), 1))) 
do_treemap <- function(ind){ 
    vp <- viewport(layout.pos.col=1, layout.pos.row=ind) 
    treemap(business, index=c("NACE1", "NACE2"), vSize=numVars[ind], 
    type="index",vp=vp) 
    upViewport(2) # Needed in version 2.0.1 due to bug. Not needed in later versions (i.e. github) 
} 

lapply(seq_along(numVars), do_treemap) 

更新:回到第二個問題:子圖的大小由視口控制。例如:

require(grid) 
grid.newpage() 

data(business) 
numVars <- c("turnover", "turnover.prev", "employees", "employees.prev") 

pushViewport(viewport(layout=grid.layout(2, 2, widths=c(0.4,0.6), heights=c(0.7,0.3)))) 

for (i in 1:2) { 
    for (j in 1:2) { 
     vp <- viewport(layout.pos.col=i, layout.pos.row=j) 
     treemap(business, index=c("NACE1", "NACE2"), vSize=numVars[i+(j-1)*2], 
       type="index",vp=vp) 
     upViewport(2) # Needed in version 2.0.1 due to bug. Not needed in later versions (i.e. github) 
    } 
} 

此外,您可以指定樹圖參數aspRatio來控制寬度和高度之間的比率。

相關問題