Tyl*_*ker 14 geocoding r ggplot2
早期我发布了一个关于使用ggplot在地图上绘制县名的问题以及在此处找到的地图.我的第一种方法是采用每个县的所有纬度和长坐标的方法,如下所示:

值得庆幸的是,Andrie提出了两个建议,即使用范围中心改善居中,然后是coord_map(){这似乎可以保持宽高比正确}.这在很大程度上改善了中心位置,如下所示:

我认为这看起来更好,但在重叠问题上仍然存在一些困难.我希望进一步提高中心性(在同一个线程中Justin提出了一个kmeans方法).如果有必要,我可以旋转文本,但我希望在必要时将它们居中并旋转(它们超出县界),以便在地图上最好地显示县名.
有任何想法吗?
library(ggplot2); library(maps)
county_df <- map_data('county') #mappings of counties by state
ny <- subset(county_df, region=="new york") #subset just for NYS
ny$county <- ny$subregion
p <- ggplot(ny, aes(long, lat, group=group)) + geom_polygon(colour='black', fill=NA)
#my first approach to centering
cnames <- aggregate(cbind(long, lat) ~ subregion, data=ny, FUN=mean)
ggplot(ny, aes(long, lat)) +
geom_polygon(aes(group=group), colour='black', fill=NA) +
geom_text(data=cnames, aes(long, lat, label = subregion), size=3)
#Andrie's much improved approach to centering
cnames <- aggregate(cbind(long, lat) ~ subregion, data=ny,
FUN=function(x)mean(range(x)))
ggplot(ny, aes(long, lat)) +
geom_polygon(aes(group=group), colour='black', fill=NA) +
geom_text(data=cnames, aes(long, lat, label = subregion), size=3) +
coord_map()
Run Code Online (Sandbox Code Playgroud)
当我昨晚在Talk Stats(链接)上解决这个问题时,如果你使用R space package(sp),它实际上很容易(作为我在凌晨花费的时间的产物!).我测试了他们的一些其他函数来创建一个SpatialPolygons对象,您可以使用坐标来返回多边形质心.我只是做了一个县,但标注点一的多边形(S4)对象匹配的重心.假设这是真的,那么Polygon对象的标签点就是质心.我使用这个小过程来创建质心的数据框并使用它们在地图上绘图.
library(ggplot2) # For map_data. It's just a wrapper; should just use maps.
library(sp)
library(maps)
getLabelPoint <- # Returns a county-named list of label points
function(county) {Polygon(county[c('long', 'lat')])@labpt}
df <- map_data('county', 'new york') # NY region county data
centroids <- by(df, df$subregion, getLabelPoint) # Returns list
centroids <- do.call("rbind.data.frame", centroids) # Convert to Data Frame
names(centroids) <- c('long', 'lat') # Appropriate Header
map('county', 'new york')
text(centroids$long, centroids$lat, rownames(centroids), offset=0, cex=0.4)
Run Code Online (Sandbox Code Playgroud)
这对每个多边形都不适用.通常,GIS中的标注和注释过程要求您为那些不适合您想要使用的自动(系统)方法的特殊情况调整标签和注释.我们对此采取的代码 - 重新编码方法并不恰当.最好包括检查给定绘图的给定大小的标签是否适合多边形; 如果没有,请将其从文本标签的记录中删除,然后手动插入以适应这种情况 - 例如,在多边形的一侧添加引线和注释,或者将标签侧向翻转,如其他地方所示.
| 归档时间: |
|
| 查看次数: |
6183 次 |
| 最近记录: |