Tmap:在不改变比例的情况下自定义连续图例值
Tmap: customize continuous legend values without changing scale
我想在不改变 tmap 比例的情况下改变图例的数字。
举个例子:
r <- raster::raster(matrix(runif(100), 10, 10))
tm_shape(r) +
tm_raster(legend.is.portrait = FALSE, style = 'cont', title = '', palette = "-RdBu") +
tm_layout(frame = FALSE, legend.outside = TRUE, legend.outside.position = "bottom")
给我们一个看起来像这样的图例:
我们可以像这样更改 tm_raster 调用中的中断:
tm_shape(r) +
tm_raster(legend.is.portrait = FALSE, style = 'cont', title = '', palette = "-RdBu",
breaks = pretty(cellStats(r, range), 3),) +
tm_layout(frame = FALSE, legend.outside = TRUE, legend.outside.position = "bottom")
这给了我们一个看起来与第一个不同的图例:
我想做的是在第一个示例中绘制图例,但只有 0.2、0.5 和 0.8 处的标签。
您可以将标签函数传递给 tm_layout
的 legend.format
参数。例如,如果您想要一个带有 0.2、0.5 和 0.8 标签的宽图例条,您可以创建更多中断但只标记您想要的:
tm_shape(r) +
tm_raster(legend.is.portrait = FALSE, style = 'cont',
title = '', palette = "-RdBu",
breaks = c(0, 0.2, 0.4, 0.5, 0.6, 0.8, 1)) +
tm_layout(frame = FALSE, legend.outside = TRUE,
legend.outside.position = "bottom",
legend.format = list(fun = function(x) {
ifelse(x %in% c(0.2, 0.5, 0.8), x, "")
}))
我想在不改变 tmap 比例的情况下改变图例的数字。
举个例子:
r <- raster::raster(matrix(runif(100), 10, 10))
tm_shape(r) +
tm_raster(legend.is.portrait = FALSE, style = 'cont', title = '', palette = "-RdBu") +
tm_layout(frame = FALSE, legend.outside = TRUE, legend.outside.position = "bottom")
给我们一个看起来像这样的图例:
我们可以像这样更改 tm_raster 调用中的中断:
tm_shape(r) +
tm_raster(legend.is.portrait = FALSE, style = 'cont', title = '', palette = "-RdBu",
breaks = pretty(cellStats(r, range), 3),) +
tm_layout(frame = FALSE, legend.outside = TRUE, legend.outside.position = "bottom")
这给了我们一个看起来与第一个不同的图例:
我想做的是在第一个示例中绘制图例,但只有 0.2、0.5 和 0.8 处的标签。
您可以将标签函数传递给 tm_layout
的 legend.format
参数。例如,如果您想要一个带有 0.2、0.5 和 0.8 标签的宽图例条,您可以创建更多中断但只标记您想要的:
tm_shape(r) +
tm_raster(legend.is.portrait = FALSE, style = 'cont',
title = '', palette = "-RdBu",
breaks = c(0, 0.2, 0.4, 0.5, 0.6, 0.8, 1)) +
tm_layout(frame = FALSE, legend.outside = TRUE,
legend.outside.position = "bottom",
legend.format = list(fun = function(x) {
ifelse(x %in% c(0.2, 0.5, 0.8), x, "")
}))