【问题标题】:Tmap: customize continuous legend values without changing scaleTmap:自定义连续图例值而不改变比例
【发布时间】:2021-02-13 23:45:30
【问题描述】:

我想更改图例的数字而不更改 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。

【问题讨论】:

    标签: r tmap


    【解决方案1】:

    您可以将标签函数传递给tm_layoutlegend.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, "")
                    }))
    

    【讨论】:

    • 谢谢@Allan Cameron。如果中断是由序列指定的(即breaks = seq(0,1,by=0.2))),知道为什么它不起作用吗?
    • @webbe 是的,它只能标记实际存在的中断。我必须添加 0.5,因为这是您想要标记的点之一。如果那里没有中断,则不能将中点标记为 0.5。该代码可以使用seq(0, 1, 0.1) 的中断,但条形可能对您来说太宽了
    猜你喜欢
    • 2020-10-17
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2020-06-24
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    相关资源
    最近更新 更多