我想从tmap包中使用tm_shape()和tm_layout()在一个页面中使用grid-package中的grid.layout()绘制多个映射。我想绘制只有一个共同的图例这里显示所有地图,类似的例子:用一个常见的图例绘制类tmap的多个对象
ggplot separate legend and plot
不幸的是,TMAP不提供ggplot对象。有人知道如何做tmaps相同吗?这里是一个重复的例子:
data(World, rivers, metro)
# creating two separate maps
africa <- World[[email protected]$continent=='Africa',]
asia <- World[[email protected]$continent=='Asia',]
my.breaks <- seq(0,80,20)
africa.map <- tm_shape(africa) +
tm_fill("HPI",style = 'fixed',breaks = my.breaks) +
tm_layout(bg.color = "white", legend.text.size = 1.3, legend.width = 0.6,
legend.outside=TRUE, legend.outside.position = 'top',
legend.outside.size = .1, legend.position = c(0.8, 0.2))
asia.map <- tm_shape(asia) +
tm_fill("HPI",style = 'fixed',breaks = my.breaks) +
tm_layout(bg.color = "white", legend.text.size = 1.3, legend.width = 0.6,
legend.outside=TRUE, legend.outside.position = 'top',
legend.outside.size = .1, legend.position = c(0.8, 0.2))
page.layout <- grid.layout(nrow = 8, ncol = 5,
widths = unit(c(1), "null"),
heights = unit(c(1), "null"),
default.units = "null",
respect = FALSE,
just = "centre")
grid.newpage()
pushViewport(viewport(layout = page.layout))
grid.text(paste('Happy Planet Index'),
vp = viewport(layout.pos.row = 1, layout.pos.col = 1:5),gp=gpar(fontsize=20))
grid.text('Africa', vp = viewport(layout.pos.row = 2, layout.pos.col = 1:2),gp=gpar(fontsize=20))
print(africa.map, vp=viewport(layout.pos.row = 3:6, layout.pos.col = 1:2))
grid.text('Asia', vp = viewport(layout.pos.row = 2, layout.pos.col = 3:5),gp=gpar(fontsize=20))
print(asia.map, vp=viewport(layout.pos.row = 3:6, layout.pos.col = 3:5))
最佳, 埃里希
这绝对有可能。你能发布一个你想实现的可重复的例子吗? –
谢谢Martijn!我添加了一个例子。我想要做的是只绘制两个地图的一个常见图例,最好将图例与地图分开,并在绘图区域的任何位置单独绘制,如ggplot2示例中所示。但如果你有更好的解决方案,我很高兴。 – Erich