tmap:删除图例右侧的空白

问题描述

我有这个情节

enter image description here

使用此脚本

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,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中修改图形的一般策略是,首先确定三个绘图范式中的哪一个在起作用,然后创建一个新功能,但这只是对代码的较小修改。更具体的策略是仔细阅读文档,然后对您的参数进行修改。我选择了中间立场,因为我假设您已经完成了第二个。

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

警告信息: 在preprocess_gt(x,交互式=交互式,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.6666667 x 4.666667英寸(150 dpi)

查看结果是否更符合您的喜好。 (在我看来,图例标签没有太宽。 enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...