作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
早期我发布了一个关于使用 ggplot 在 map 上绘制县名的问题,发现 map HERE .我的第一种方法是采用每个县的所有纬度和经度坐标的方法,如下所示:
值得庆幸的是,Andrie 有 2 条建议来使用范围中心和 coord_map() {这似乎保持纵横比正确}来改善居中。这极大地改善了居中,如下所示:
我认为这看起来更好,但在重叠问题上仍然存在一些困难。我希望进一步改善居中(在同一个线程中,贾斯汀建议使用 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)
关于r - 改进居中县名ggplot和 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9441778/
我是一名优秀的程序员,十分优秀!