R 相对较新,所以如果这是一个幼稚的问题,我深表歉意。我正在尝试使用 prettymapr 创建一个包含一系列地图(带有数据点覆盖)的 PDF 文档。在此下方,我想显示一些简单的文本,其中包含有关该图的信息(例如质心纬度/经度)。我的问题只是格式化。我确信我的大部分代码都不是最优雅的,但我在下面创建了一个简化版本。这两个问题都与倒数第二个“在绘图下方生成文本”步骤有关
#Add libraries
library(here)
library(rosm)
library(prettymapr)
#Generate fake data
gpsdata <- data.frame("Clusters" = c(1,2), "Latitudes" = c(38.896357, 37.819039), "Longitudes" = c(-77.036562, -122.478556))
#Initiate PDF
pdf(file = here::here('multiplemaps.pdf'), width = 8, height = 11)
#For loop over individual clusters
for (loc in gpsdata$Clusters){
#Create subsets of relevant datapoints and cluster
subclusters <- subset(gpsdata,Clusters==loc)
#Create bounding box
boundbox <- makebbox(n = subclusters$Latitudes[1]+0.005, e = subclusters$Longitudes[1]+0.003,
s = subclusters$Latitudes[1]-0.005, w = subclusters$Longitudes[1]-0.003)
#Split into map and text plot
layout(mat = matrix(c(1,2),nrow =2, ncol=1),
heights = c(8,3),
widths = 1)
#Generate map plot using prettymapr
prettymap({
#Set map zoom
my_zoom <- rosm:::tile.raster.autozoom(extract_bbox(matrix(boundbox,ncol=2,byrow=TRUE)),epsg=4326)
#Make primary plot
osm.plot(boundbox, zoom = my_zoom, zoomin = -1)
#Add centroid in blue
osm.points(subclusters$Longitudes, subclusters$Latitudes, pch = 21, col = 'black', bg = 'blue',cex = 5)
},
#Generate text below plot
title = paste0("\n\n\n\n\nLocation: ", subclusters$Location, "\n",
"Cluster Centroid Coordinates: ", round(subclusters$Latitudes,5), ",",round(subclusters$Longitudes,5)))
}
dev.off()
问题 #1 文本总是以不可见或撞到下一页而告终。我发现的唯一解决方案是非常hack-y(使用布局添加会撞到下一个情节的标题)并用一堆中断填充它以确保它不会部分位于地图下方。这让我很担心,因为实际上我将在此处添加一些复杂的变量信息,这些信息的长度会有很大差异,而且似乎在某些时候这会再次将文本推到地图下方。我尝试添加创建一个新的空白图并添加文本,但它总是最终将它们解释为不同的组件并将它们放在单独的页面上。我尝试单独添加文本,但我“认为” pdf 专门寻找情节并且不会阅读它。
问题 #2 质心纬度/经度被特别包含在内,因此可以将其复制/粘贴到谷歌地图中。由于某种原因,在转换为 pdf 时,经度中的连字符被转换为破折号,谷歌地图无法读取。它很小,但很烦人。将其指定为 ascii 字符(例如 \55)并不能解决此问题。我不敢相信这里没有某种简单的解决方法,但我找不到。
提前致谢!