gpt4 book ai didi

r - r 中的哪些投影会使城市 map 变胖?

转载 作者:行者123 更新时间:2023-12-04 18:40:55 25 4
gpt4 key购买 nike

我正在尝试制作一些城市 map ,我想稍微扭曲它们,以便在最终 map 上最密集的部分(在这种情况下是曼哈顿)看起来更宽一些。我很难在城市级别找到好的投影示例。

我只是想要一个能够制作出更好看的纽约市 map 的投影,但这可能太主观了,所以假设我想给曼哈顿增肥。我在下面尝试过的可重现代码:

library(ggplot2)
library(maptools)

shpny.tf <- tempfile()

download.file(
"http://www2.census.gov/geo/tiger/TIGER2010/COUNTY/2010/tl_2010_36_county10.zip" ,
shpny.tf ,
mode = 'wb'
)

shpny.uz <- unzip( shpny.tf , exdir = tempdir() )

ny.shp <- readShapePoly( shpny.uz[ grep( 'shp$' , shpny.uz ) ] )

# limit the shapefile to only the five boroughs
nyc.shp <- subset( ny.shp , as.numeric( as.character( COUNTYFP10 ) ) %in% c( 5 , 47 , 61 , 81 , 85 ) )

# prepare for plotting
nyc <- fortify( nyc.shp )

# make a plot
p <- qplot( data = nyc , x = long , y = lat )

# default plot
p

# these two seem like good candidates for fattening,
# but i'm not sure how to make them take up more space on the right and left side
p + coord_map("ortho", orientation=c(41, -74, -25))
p + coord_map("azequalarea",orientation=c(41,-74,-22))

# this one's okay but still not ideal
p + coord_map("lagrange")

# this one is named for new york yet i can't get it to do anything useful
p + coord_map("newyorker",r=10)

理想情况下,结果看起来更接近这张纽约地铁 map 中的比例。我知道仅凭投影不可能产生如此大的失真,我只是好奇是否有任何投影可以使 map 更接近理想形状。谢谢!

enter image description here

最佳答案

我下载了 shapefile 并存储了它,因为不断下载 1M 文件的效果值得怀疑。因为我是用 curl 做到的在命令行上,我已经在终端中了,所以我用 ogr2ogr 预先提取了五个行政区。 :

$ ogr2ogr -f "ESRI Shapefile" \ 
-where 'COUNTYFP10 IN ("005", "047", "061", "081", "085")' \
boroughs.shp tl_2010_36_county10.shp

接下来,我用 readOGR 读取了新的 shapefile并设置一些必要的库:
library(rgdal)
library(maptools)
library(ggplot2)

boroughs.shp <- readOGR("tl_2010_36_county10/", "boroughs")

现在,我们将纽约和其他四个行政区分开:
nyc <- boroughs.shp[boroughs.shp$NAME10 == "New York",]
other_four <- boroughs.shp[boroughs.shp$NAME10 != "New York",]

阅读 ?elide因为它可以让你缩放多边形并移动它们,你需要做的比我在这个例子中展示的要多。在这里,我将 nyc 缩放为 1.1(任意),但其他人保持 1:1 的比例。自 elide 以来,我在这里采取了一些捷径并同时做这两项工作更改 SpatialPolygonsDataFrames 的 CRS。
nyc <- elide(nyc, scale=1.1)
other_four <- elide(other_four, scale=1)

接下来,我们重新组合它们:
boroughs.shp <- spRbind(nyc, other_four)

并为 ggplot 做必要的工作:
boroughs <- fortify(boroughs.shp, region="NAME10" )

我更喜欢 geom_map这为您提供了连续的多边形与您的点图:
gg <- ggplot(data=boroughs, aes(x=long, y=lat))
gg <- gg + geom_map(map=boroughs, aes(map_id=id, group=group), fill="white", color="black")
gg <- gg + coord_map()
gg

enter image description here

显然,这不是您想要的最终状态,但您现在已经获得了构建正确制图所需的工具(尽管我个人并不喜欢扭曲的多边形 map )。

您可以 read up more on making cartograms得到最终的效果,但需要更多的努力。 IMO,如果您想进行增肥/缩放以显示密度,那么真正的制图是通往这里的方式。

编辑 或者,也许只是满足于 globular ?
gg_globular <- gg + coord_map("globular", orientation=c(41,-74,-22)) + ggtitle("globular")

enter image description here

关于r - r 中的哪些投影会使城市 map 变胖?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26493524/

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