gpt4 book ai didi

r - ggplot 在 map 上以名称为中心

转载 作者:行者123 更新时间:2023-12-03 02:42:14 25 4
gpt4 key购买 nike

我正在尝试使用 ggplot2 和 map 来绘制纽约州各县的名称。我的方法是按县找到纬度和经度的平均值(我假设这是县的中心,但这可能是错误的想法),然后使用 geom_text 在 map 上绘制名称。它的行为并不像我预期的那样,因为它为每个县绘制了多个名称。

我正在寻找的结果是每个文本(县)的中心位于其各自县的中心。

除了解决问题之外,我很乐意帮助理解我对 ggplot 的思考出了什么问题。

提前谢谢您。

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
cnames <- aggregate(cbind(long, lat) ~ subregion, data=ny, FUN=mean)

p <- ggplot(ny, aes(long, lat, group=group)) + geom_polygon(colour='black', fill=NA)
p #p of course plots as expected

#now add some county names (3 wrong attempts)
p + geom_text(aes(long, lat, data = cnames, label = subregion, size=.5)) #not correct

#I said maybe I'm confusing it with the same names for different data sets
names(cnames) <-c('sr', 'Lo', 'La')
p + geom_text(Lo, La, data = cnames, label = sr, aes(size=.5)) #attempt 2
p + geom_text(aes(Lo, La, data = cnames, label = sr, size=.5)) #attempt 3

最佳答案

由于您要创建两个图层(一个用于多边形,第二个用于标签),因此您需要为每个图层指定数据源和正确映射:

ggplot(ny, aes(long, lat)) +  
geom_polygon(aes(group=group), colour='black', fill=NA) +
geom_text(data=cnames, aes(long, lat, label = subregion), size=2)

注意:

  • 由于 longlat 出现在两个数据框中,因此您可以在第一次调用 ggplot 时使用 aes(long, lat)。您在此处声明的任何映射均可用于所有层。
  • 出于同样的原因,您需要在多边形图层内声明 aes(group=group)
  • 在文本层中,您需要将数据源移至aes之外。

完成此操作并绘制 map 后,您将意识到通过范围的平均值可以更好地近似中点,并使用尊重纵横比的 map 坐标系和投影:

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=2) +
coord_map()

enter image description here

关于r - ggplot 在 map 上以名称为中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9441436/

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