在绘制“ tmap”期间,在“ R”库中将标签放置在绘制区域之外(部分)

时间:2019-05-19 01:01:54

标签: r tmap

我正在将shapefile导入R,并尝试使用标签将其绘制。不幸的是,一些标签重叠。这就是为什么我必须对“ tm_text ”函数使用参数“ auto.placement = T ”。但是此参数将一些标签(部分)放置在打印区域之外。标签在每个图上的位置都是随机的。有时标签带有绘图区域,但是大多数时候没有(剪切)。

如屏幕截图“ Palangos m。”所示。缩减为“ angos m”。和“克莱佩多斯山”缩减为“ aipedos m。”。

屏幕截图map

tm_shape(area_r1) + 
  tm_fill("winner", title = "Winner", style = "cat", 
      palette = c("#FFFFB3", "#1F78B4", "#1A9850", "#E7298A") ) +
  tm_legend(text.size = 0.75) +
  tm_layout("", legend.position = c("left", "bottom")) +
  tm_borders("grey60") +
  tm_layout(frame = F) +
  tm_text("savivald", size = .65, col = "black", auto.placement = T)

我可以怎么做才能使这些标签适合绘图区域?

2 个答案:

答案 0 :(得分:0)

控制auto.placement = T的随机性很困难(尽管设置种子可能会有所帮助)。

可以要做的是稍微调整tmap对象的边界框,以便在左边留出更多空间来容纳两个左右的字母。

将bbox增大一半可能有点夸张,但是您可以根据需要进行调整。

bbox_new <- st_bbox(area_r1) # current bounding box

xrange <- bbox_new$xmax - bbox_new$xmin # range of x values
yrange <- bbox_new$ymax - bbox_new$ymin # range of y values

  bbox_new[1] <- bbox_new[1] - (0.5 * xrange) # xmin - left
# bbox_new[3] <- bbox_new[3] + (0.5 * xrange) # xmax - right
# bbox_new[2] <- bbox_new[2] - (0.5 * yrange) # ymin - bottom
# bbox_new[4] <- bbox_new[4] + (0.5 * yrange) # ymax - top

bbox_new <- bbox_new %>%  # take the bounding box ...
  st_as_sfc() # ... and make it a sf polygon

tm_shape(area_r1, bbox = bbox_new) + 
  tm_fill("winner", title = "Winner", style = "cat", 
      palette = c("#FFFFB3", "#1F78B4", "#1A9850", "#E7298A") ) +
  tm_legend(text.size = 0.75) +
  tm_layout("", legend.position = c("left", "bottom")) +
  tm_borders("grey60") +
  tm_layout(frame = F) +
  tm_text("savivald", size = .65, col = "black", auto.placement = T)

我写了一篇博客文章,概述了该技术。 https://www.jla-data.net/eng/adjusting-bounding-box-of-a-tmap-map/

您的示例并非完全可复制,但是此图像(为北卡罗来纳州地图上的“大胖子”标题留出更多空间)应该可以为您提供想法。

enter image description here

答案 1 :(得分:0)

@Jinda Lacko使用bbox有一个创造性的解决方案,但是由于某种原因,它对我不起作用。一个简单的解决方案是在main.title中使用tm_layout,例如tm_layout(main.title = "Big Fat Title")。有关更多详细信息,请参见此question