我正在将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)
我可以怎么做才能使这些标签适合绘图区域?
答案 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/
您的示例并非完全可复制,但是此图像(为北卡罗来纳州地图上的“大胖子”标题留出更多空间)应该可以为您提供想法。
答案 1 :(得分:0)
@Jinda Lacko使用bbox
有一个创造性的解决方案,但是由于某种原因,它对我不起作用。一个简单的解决方案是在main.title
中使用tm_layout
,例如tm_layout(main.title = "Big Fat Title")
。有关更多详细信息,请参见此question。