首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何显示已保存的树状图对象?包括MWE吗?

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

Stack Overflow用户
提问于 2016-09-27 03:18:27
回答 1查看 497关注 0票数 4

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

代码语言:javascript
复制
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:我的动机是在生成特定的树映射后修改一些分类标签(添加百分比),但我无法从树顶对象在显示中生成图。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-27 05:37:06

看一下源代码,它似乎没有存储足够的信息来允许重新绘制。treemap()是因为它的绘图副作用而被调用的。考虑到这一点,我不知道为什么他们有一个draw=FALSE选项,如果以后没有办法绘制它。

即使官方函数不允许这样做,您也可以破解该函数。我们可以修改函数以返回它传递给draw的所有参数。这是一个用treemap_2.4-1测试的版本

代码语言:javascript
复制
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)

然后,您可以像前面一样调用该函数

代码语言:javascript
复制
tm <- treemap2(
  GNI2014,
  index = c("continent", "iso3"),
  vSize = "population",
  vColor = "GNI",
  draw = FALSE,
  type = "value"
)

现在,用于绘制函数的所有参数都存储在tm$drawparam中。它使用一个隐藏函数tmDrawRect来完成所有绘图,但您可以使用

代码语言:javascript
复制
do.call(treemap:::tmDrawRect, tm$drawparam)

使用存储在对象中的数据。如果更改tm$drawparam中的任何数据,则会直接影响绘图。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39710690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档