2016-09-26 44 views
3

這可能是一個愚蠢的問題,但是沒有人知道如何在R中生成後顯示樹形圖對象?考慮下面的代碼:如何顯示保存的樹形圖對象?包括MWE?

loadpackages <-function(package.list = c("ggplot2", "Rcpp")) {new.packages <-package.list[!(package.list %in% installed.packages()[, "Package"])] 
    if (length(new.packages)) 
     install.packages(new.packages, repos = 'http://cran.us.r-project.org') 
    lapply(eval(package.list), require, character.only = TRUE)} 
loadpackages(c("treemap")) 

data(GNI2014) 
tm = treemap(
    GNI2014, 
    index = c("continent", "iso3"), 
    vSize = "population", 
    vColor = "GNI", 
    draw = FALSE, # comment this line out to see the treemap 
    type = "value" 
) 

這不會產生圖形,但它會保存一個「樹形圖列表」。有誰知道我可以如何顯示這個對象?

PS:我的動機是在生成特定的樹形圖後修改某些分類標籤(添加百分比),但是我無法從樹頂物體的顯示中生成一個圖。

回答

1

查看源代碼,它看起來沒有存儲足夠的信息以允許重新繪製。 treemap()意在被稱爲它陰謀副作用。鑑於此,我不知道爲什麼他們有一個draw=FALSE選項,如果沒有辦法繪製它以後。

即使官方功能不允許它,你可以破解該函數。我們可以修改函數來返回它傳遞的所有參數來繪製。這裏的一個版本treemap_2.4-1

treemap2 <- treemap 
drawcall <- body(treemap)[[c(85,3,2)]] 
drawcall[[1]] <- quote(list) 
savelist <- as.list(body(t2)[[c(90,3)]]) 
savelist[["drawparam"]] <- drawcall 
body(treemap)[[c(90,3)]] <- as.call(savelist) 

測試然後就可以調用像以前一樣使用

tm <- treemap2(
    GNI2014, 
    index = c("continent", "iso3"), 
    vSize = "population", 
    vColor = "GNI", 
    draw = FALSE, 
    type = "value" 
) 

現在所有的參數繪製存儲在tm$drawparam該函數的功能。它使用一個隱藏的功能tmDrawRect做所有的繪圖,但你可以調用與

do.call(treemap:::tmDrawRect, tm$drawparam) 

使用存儲在對象中的數據。如果更改tm$drawparam中應直接影響繪圖的任何數據。

+0

非常感謝您在此方面的出色工作。你不僅解決了我的困惑,你的解決方案教會了我如何引用函數內部。如果你曾經訪問過DC,請告訴我,你已經獲得了*免費午餐*。 – RTS