在多边形上绘制点文本标签没有重叠

时间:2013-01-04 00:05:11

标签: r shapefile maptools

在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标记为alpha / beta。如果文本包含在原始文件中,我可以使用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扩展名。我只能说,直到我通过内部搜索浏览此网站,并且最近几天在线谷歌搜索,我才发布。从我所看到的是,这个网站和这个社区帮助初学者[相对于像这里的人们非常先进的技能]像我一样。

提前谢谢。

1 个答案:

答案 0 :(得分:1)

如果没有示例,我将提供plotrix包中可用的内容

> require(plotrix)
> x<-rnorm(10)
> y<-rnorm(10)
> plot(x,y); thigmophobe.labels(x,y,labels=paste(round(x,2),round(y,2)))