在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
扩展名。我只能说,直到我通过内部搜索浏览此网站,并且最近几天在线谷歌搜索,我才发布。从我所看到的是,这个网站和这个社区帮助初学者[相对于像这里的人们非常先进的技能]像我一样。
提前谢谢。
答案 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)))