2013-08-23 2 views
1

하나의 페이지에 여러 개의 트리 맵을 넣으려고합니다. 각 트리 맵은 데이터의 하위 집합을위한 것이므로 한 번에 모두 볼 수 있으면 유용합니다. 다음 코드는 각 하위 집합에 트리 맵을 만듭니다. 그러나 각각은 고유 한 페이지에 있습니다.하나의 페이지에 여러 개의 R 트리 맵이 있습니다.

질문 1) 모든 페이지를 하나의 페이지에 넣을 수있는 방법이 있습니까? 질문 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 또 다른 문제점은' mfrow'는'base' 그래픽을 사용하고'treemap'은'grid' 그래픽을 사용하며, 두 그래픽은 일반적으로 호환되지 않습니다. –

답변

2

treemap 함수는 그리드 뷰포트 인 "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

귀하의 질문에 감사드립니다. 귀하의 정답에 감사드립니다.

사실 두 개의 추가 popViewport가 필요한 작은 버그가있었습니다. 그것과는 별도로, 당신은 vp를 push 할 필요가 없다 (그리고 나중에 pop한다). 이 버그는 현재 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) 

UPDATE : 두 번째 질문에 돌아올는 다음 줄거리의 크기는 뷰포트에 의해 제어됩니다. 예를 들어 :

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를 지정할 수 있습니다.

관련 문제