gpt4 book ai didi

r - 改进居中县名ggplot和 map

转载 作者:行者123 更新时间:2023-12-03 22:33:07 24 4
gpt4 key购买 nike

早期我发布了一个关于使用 ggplot 在 map 上绘制县名的问题,发现 map HERE .我的第一种方法是采用每个县的所有纬度和经度坐标的方法,如下所示:
enter image description here

值得庆幸的是,Andrie 有 2 条建议来使用范围中心和 coord_map() {这似乎保持纵横比正确}来改善居中。这极大地改善了居中,如下所示:
enter image description here

我认为这看起来更好,但在重叠问题上仍然存在一些困难。我希望进一步改善居中(在同一个线程中,贾斯汀建议使用 kmeans 方法)。如有必要,我可以旋转文本,但我希望在必要时居中和旋转名称(它们延伸到县边界之外)以最好地在 map 上显示县名。

有任何想法吗?

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()

最佳答案

当我昨晚在 Talk Stats (link) 上解决这个问题时,如果你使用 R 空间包 (sp),它实际上非常简单(作为我花了几个小时的产物!)。我测试了他们的一些其他函数来创建一个 SpatialPolygons 对象,您可以在该对象上使用坐标来返回多边形质心。我只为一个县做过,但多边形(S4)对象的标签点与质心匹配。假设这是真的,那么 Polygon 对象的标签点就是质心。我使用这个小过程来创建质心数据框并使用它们在 map 上绘制。

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)

这不适用于每个多边形。 GIS 中的标注和注记过程通常要求您针对那些不适合您要使用的自动(系统)方法的特殊情况调整标注和注记。我们对此采取的code-look-recode方法并不合适。最好包括检查给定图的给定大小的标签是否适合多边形;如果没有,请将其从文本标签记录中删除,然后手动插入以适应情况 - 例如,添加一条引导线并在多边形的一侧进行注释,或者将标签侧向显示,如在其他地方显示的那样。

关于r - 改进居中县名ggplot和 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9441778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com