我正在使用一个使用treemap
包来生成树形图的包(grid
)。但是,我想将这些树图中的几个一起绘制,以便为这些图添加different color schemes。 tmPlot
函数使用grid.newpage
函数清除图形窗口。我没有找到保存grid.newpage
对象的方法,就像ggplot2
个对象一样。有没有办法将几个grid.newpage
对象绘制到同一个窗口?
## Example
library(treemap)
# load Gross national income data
data(GNI2010)
size <- aggregate(GNI ~ continent, GNI2010, sum)
size <- size[with(size, order(GNI, decreasing = T)),]
cont <- size$continent
widths <- c(sum(size[c(1,3,5),]$GNI),
sum(size$GNI) - sum(size[c(1,3,5),]$GNI))
heights <- c(sum(size[c(1,2),]$GNI),
sum(size[c(3,4),]$GNI),
sum(size[c(5,6),]$GNI))
palettes <- c("Greens", "Blues", "Reds", "Oranges", "Purples", "Greys")
i <- 1 # This is to be replaced by for loop
x <- subset(GNI2010, continent == cont[i], cex = 5)
# create treemap
layout(matrix(1:6, 3, byrow = TRUE), widths = widths, heights = heights)
x1 <- tmPlot(x,
index=c("iso3"),
vSize="population",
vColor="GNI",
type="value", title = "",
position.legend = "none",
palette = palettes[i])
grid.text(cont[i], 0.5, 0.5, gp=gpar(fontsize=20, font = 2, col = "white"))
## x1 is does not make a plot as such and tmPlot overwrites layout
据我所知,我根据GNI总和来扩展图表的解决方案是不对的。一旦我弄清楚如何在同一个窗口中绘制这些树图,我可能会在稍后提出另一个问题。
编辑:我认为这个问题的答案是“没有”。目前你不能按名称保存grid.newpage对象,也不能在页面上保存其中的几个,因为功能“擦除当前设备或移动到新页面”,如description中所述。但是,可以找到解决方法。 tmPlot
软件包目前(截至2013年3月23日)不支持viewport
,但开发版本支持{{1}}。
答案 0 :(得分:2)
感谢您的提问。 tmPlot的输出确实不是保存的图。
在下一次更新中,我将添加参数vp,通过该参数可以指定视口进行绘制。只有在未指定的情况下,才会调用grid.newpage。
更新:您可以在https://github.com/mtennekes/treemap
检查并测试开发版本应用Bryan Hanson的例子:
vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y)
grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 2)))
tmPlot(GNI2010,
index="continent",
vSize="population",
vColor="GNI",
type="value",
vp = vplayout(1,1))
tmPlot(GNI2010,
index=c("continent", "iso3"),
vSize="population",
vColor="GNI",
type="value",
vp = vplayout(1,2))
答案 1 :(得分:1)
这是一种对任何网格图形都非常灵活的方法:
vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y)
grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 2)))
print(a, vp = vplayout(1,1))
print(b, vp = vplayout(1,2))
a
和b
是您保存的绘图对象。因此,请提前单独测试每个绘图,将它们保存为a, b, ...
,然后按上图绘制它们。
哦,如果tmPlot
始终grid.newpage
,那么请检查它是否有new.page
参数,您可以将其设置为FALSE
,或制作副本功能并注释掉newpage
。