在 R 的 maptools 包中使用 pointLabel 将为点绘制文本标签以避免文本重叠。
但是有没有办法避免/最小化文本标签与从形状文件创建的底层多边形的轮廓重叠?
例如,在绘制人口普查块的位置时,希望文本标签不要落在附近人口普查块边界的顶部等。
我使用的数据是从 2000 年人口普查块第 12A 版获得的,位于: http ://www.nyc.gov/html/dcp/download/bytes/nycd_12aav.zip
并解压成以下5个文件:
nycd.dbf
nycd.prj
nycd.shp
nycd.shp.xml
nycd.shx
我打算从我自己的包含垂直列表的文本文件中标记各种块:
Zone 1
Zone 2
Zone 3
Zone 4
etc.
我加载了以下库:
library(gpclib)
library(maptools)
library(RColorBrewer)
library(classInt)
library(maps)
然后我尝试了:
zip=readShapePoly(file.choose())
并选择了nycd.shp
上面的文件。然后:
plot(zip, col="lightgray", border="black", axes=TRUE, pbg="white")
如果它不会与标签引起其他冲突,我更愿意给它上色:
zip@data$noise <- rnorm(nrow(zip@data))
colors=brewer.pal(9, "YlOrRd")
cols[is.na(cols)] <- "#D9D9D9"
brks=classIntervals(zip$noise, n=9, style="quantile")$brks
plot(zip, col=colors[findInterval(zip$noise, brks,all.inside=TRUE)], axes=F)
我将如何按区域 1、区域 2 等标记各个区域,而无需/最小化标签从每个多边形之外延伸?我的问题意味着我知道如何用文本标记形状文件。我不知道如何用单词标记形状,只用 xy 值标记形状,或者用pointLabel
. 如果文本包含在原始文件中,我可以使用该工具找出一些功能,maps
因此可以使用$name
扩展名进行访问。类似于我从http://geography.uoregon.edu/GeogR/examples/maps_examples02.htm看到的代码:
# map of large cities
data(world.cities) # make the world cities location data set from the maps package available
# match the large cities with those in the database
m <- match(paste(tolower(as.character(cities$City)),tolower(as.character(cities$Country))),
paste(tolower(world.cities$name),tolower(world.cities$country.etc)))
# assign the world.cities location information to the large cities
big.cities <- NULL
big.cities$name <- cities2$City
big.cities$long <- world.cities$long[m]
big.cities$lat <- world.cities$lat[m]
big.cities
# plot the map
map("world")
map.axes()
points(big.cities$long,big.cities$lat, col="blue")
text(big.cities$long, big.cities$lat, big.cities$name, col="red", cex=.5
$name
但不幸的是,这对我来说不是一个解决方案,因为我想使用的标签没有扩展。我只能说,直到我通过内部搜索和最近几天的在线谷歌搜索浏览了这个网站,我才发帖。从我所看到的情况来看,这个网站和这个社区可以帮助像我这样的初学者[相对于这里的人的非常先进的技能]。
先感谢您。