如何在 tmap 中共享多张地图的图例?
How can I share legend for multiple maps in tmap?
运行 来自 tmap
库的示例代码:
library("tmap")
tmap_mode("plot")
data(NLD_muni)
tm_shape(NLD_muni) +
tm_borders() +
tm_bubbles(size = c("origin_native", "origin_non_west"), legend.size.is.portrait = TRUE)
给我以下地图
所有作品都如广告所示,但我试图强制 tmap
在两张地图上使用相同的气泡大小.. 并且只绘制一个图例。如何实现?
大小:您需要指定 size.max
以便为两个变量提供公共引用。
图例:没有直接的方法——您不能将 c(TRUE, FALSE)
向量传递给 legend.size.show
,它要么是两者,要么是 none。您需要使用自定义 grid
.
的解决方法
代码如下:
library(grid)
library(tmap)
tmap_mode("plot")
data(NLD_muni)
max_size <- max(c(NLD_muni$origin_non_west, NLD_muni$origin_native))
nld_plot_native <- tm_shape(NLD_muni) +
tm_borders() +
tm_bubbles(
size = "origin_native",
size.max = max_size,
legend.size.is.portrait = TRUE,
legend.size.show = TRUE
)
nld_plot_non_west <- tm_shape(NLD_muni) +
tm_borders() +
tm_bubbles(
size = "origin_non_west",
size.max = max_size,
legend.size.is.portrait = TRUE,
legend.size.show = FALSE
)
grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 2)))
print(nld_plot_native, vp = viewport(layout.pos.col = 1))
print(nld_plot_non_west, vp = viewport(layout.pos.col = 2))
运行 来自 tmap
库的示例代码:
library("tmap")
tmap_mode("plot")
data(NLD_muni)
tm_shape(NLD_muni) +
tm_borders() +
tm_bubbles(size = c("origin_native", "origin_non_west"), legend.size.is.portrait = TRUE)
给我以下地图
所有作品都如广告所示,但我试图强制 tmap
在两张地图上使用相同的气泡大小.. 并且只绘制一个图例。如何实现?
大小:您需要指定 size.max
以便为两个变量提供公共引用。
图例:没有直接的方法——您不能将 c(TRUE, FALSE)
向量传递给 legend.size.show
,它要么是两者,要么是 none。您需要使用自定义 grid
.
代码如下:
library(grid)
library(tmap)
tmap_mode("plot")
data(NLD_muni)
max_size <- max(c(NLD_muni$origin_non_west, NLD_muni$origin_native))
nld_plot_native <- tm_shape(NLD_muni) +
tm_borders() +
tm_bubbles(
size = "origin_native",
size.max = max_size,
legend.size.is.portrait = TRUE,
legend.size.show = TRUE
)
nld_plot_non_west <- tm_shape(NLD_muni) +
tm_borders() +
tm_bubbles(
size = "origin_non_west",
size.max = max_size,
legend.size.is.portrait = TRUE,
legend.size.show = FALSE
)
grid.newpage()
pushViewport(viewport(layout = grid.layout(1, 2)))
print(nld_plot_native, vp = viewport(layout.pos.col = 1))
print(nld_plot_non_west, vp = viewport(layout.pos.col = 2))