【问题标题】:tmap: remove white space to the right of the legend.outsidetmap:删除legend.outside右侧的空白
【发布时间】:2021-02-24 20:51:36
【问题描述】:

我得到了这个情节

使用这个脚本

library(raster)
library(tmap)
library(classInt)

download.file("https://github.com/mtennekes/tmap/files/5500015/Difference.tif.zip",
              "Difference.tif.zip")

unzip("Difference.tif.zip", "Difference.tif")

diff <- raster("Difference.tif")

diff_values <- getValues(diff)

diff_values_below0 <- diff_values[diff_values < 0]
diff_values_above0 <- diff_values[diff_values > 0]

classes1 <- classIntervals(diff_values_below0, n = 4, style = "fisher")
classes2 <- classIntervals(diff_values_above0, n = 4, style = "fisher")

all_classes <- c(classes1$brks, classes2$brks)


diff_map<- 
  tm_shape(diff) + 
  tm_raster(midpoint = 0, 
            breaks = all_classes,
            palette = "RdBu")+
  tm_layout(legend.outside = TRUE)

tmap_save(diff_map, "diff_map.png", width=1000, height=700,dpi = 150)

如您所见,图例右侧有空白区域。我尝试使用 outer.margins 删除它,但我的试验都没有奏效。

关于如何做到这一点的任何建议?

【问题讨论】:

    标签: r tmap


    【解决方案1】:

    感谢您编写了一个有据可查的问题。在 R 中修改图形的一般策略是首先确定三个绘图范式中的哪一个在起作用,然后创建一个新函数,该函数只是对代码的微小修改。更具体的策略是仔细阅读文档,然后对您的参数进行修改。我选择了一个中间立场,因为我假设你已经完成了第二个。

    查看tm_layout 的代码,它似乎主要是用图形参数替换基本图形,但这只是一个猜测。然后我进一步猜测,legend.width 是要修改的参数(我选择作为起点,0.2)但我收到了警告消息:

    警告信息: 在 preprocess_gt(x, interactive = interactive, orig_crs = gm$shape.orig_crs) : legend.width 控制地图中图例的宽度。请使用 legend.outside.size 控制外部图例的宽度

    然后在我的文件浏览器中查看结果,我看到......没有改善。所以注意我再次尝试的警告,这次更改了legend.outside.size 参数。它确实将绘图位置移到了右侧,但我收到了一个不同的警告,该参数设置为 0.15:

    图例标签太宽。标签的大小已调整为 0.54、0.59、0.59、0.59、0.62、0.66、0.66、0.60、0.55。增加 legend.width(tm_layout 的参数)以使图例更宽,从而使标签更大。 地图保存到 /home/david/Downloads/diff_map3.png 分辨率:1000 x 700 像素 尺寸:6.666667 x 4.666667 英寸(150 dpi)

    看看结果是否更符合您的喜好。 (在我看来,图例标签太宽了。

    【讨论】:

    • 非常感谢您的时间和帮助。感谢包开发者,它是legend.outside.sizeasp的组合github.com/mtennekes/tmap/issues/522
    • 如果您有更好的答案,请随时发布答案并检查一下。