1

在 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但不幸的是,这对我来说不是一个解决方案,因为我想使用的标签没有扩展。我只能说,直到我通过内部搜索和最近几天的在线谷歌搜索浏览了这个网站,我才发帖。从我所看到的情况来看,这个网站和这个社区可以帮助像我这样的初学者[相对于这里的人的非常先进的技能]。

先感谢您。

4

1 回答 1

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)))
于 2013-01-04T00:22:30.563 回答