如何显示已保存的树形图对象?包括MWE?

时间:2016-09-26 19:18:27

标签: r plot treemap

这可能是一个愚蠢的问题,但有人知道如何在R中生成树形图对象后显示它吗?请考虑以下代码:

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:我的动机是在制作特定树形图后修改一些分类标签(添加百分比),但我无法在treetop对象的显示中生成绘图。

1 个答案:

答案 0 :(得分:2)

查看源代码,它似乎没有存储足够的信息以允许重新绘制。 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中应该直接影响绘图的任何数据。