我正在使用R中的ggmap包,我对地理空间数据可视化相对较新.我有一个11个纬度和经度对的数据框,我想在地图上绘制,每个都有一个标签.这是虚拟数据:
lat<- c(47.597157,47.656322,47.685928,47.752365,47.689297,47.628128,47.627071,47.586349,47.512684,47.571232,47.562283)
lon<-c(-122.312187,-122.318039,-122.31472,-122.345345,-122.377045,-122.370117,-122.368462,-122.331734,-122.294395,-122.33606,-122.379745)
labels<-c("Site 1A","Site 1B","Site 1C","Site 2A","Site 3A","Site 1D","Site 2C","Site 1E","Site 2B","Site 1G","Site 2G")
df<-data.frame(lat,lon,labels)
Run Code Online (Sandbox Code Playgroud)
现在我annotate用来创建数据点标签并在地图上绘制这些标签;
map.data <- get_map(location = c(lon=-122.3485,lat=47.6200),
maptype = 'roadmap', zoom = 11)
pointLabels<-annotate("text",x=uniqueReach$lon,y=c(uniqueReach$lat),size=5,font=3,fontface="bold",family="Helvetica",label=as.vector(uniqueReach$label))
dataPlot <- ggmap(map.data) +
geom_point(data = uniqueReach,aes(x = df$lon, y = df$lat), alpha = 1,fill="red",pch=21,size = 6) + labs(x = 'Longitude', y = 'Latitude')+pointLabels
Run Code Online (Sandbox Code Playgroud)
这产生了数据点的图 
如您所见,有两个数据点重叠(-122.44,47.63),它们的标签也重叠.现在我可以手动为每个标签点添加一个移位以防止标签重叠(参见这篇文章),但是当我需要为不同的纬度和经度对产生许多这些图时,这不是一个很好的技术.
有没有办法可以自动保持数据标签不重叠?我意识到标签是否重叠取决于实际的图形尺寸,因此如果需要,我可以将图形尺寸固定在某些尺寸上.提前感谢您的任何见解!
编辑
以下是使用Sandy Mupratt给出的答案修改的代码
# Defining function to draw text boxes
draw.rects.modified <- function(d,...){
if(is.null(d$box.color))d$box.color <- NA
if(is.null(d$fill))d$fill <- "grey95" …Run Code Online (Sandbox Code Playgroud)