gpt4 book ai didi

r - R 中的等值线图 - TIGER Shapefile 问题

转载 作者:行者123 更新时间:2023-12-04 10:46:03 26 4
gpt4 key购买 nike

有一个关于用 R 映射的问题,特别是关于 R 中的等值线图。

我有一个分配给 are 的邮政编码数据集和一些相关数据(数据集是 here )。

我的最终数据格式是:区域 ID、ZIP、概率值、客户计数、区域概率和区域客户总数。我试图通过在 map 上绘制区域概率和区域客户总数来呈现这些数据。我试图通过使用人口普查 TIGER Shapefiles 来做到这一点,但我想 R 无法处理整个国家。

我对统计功能感到满意,现在我正在将我所有的映射从第三方 GIS 应用程序转移到在 R 中完成我所有的映射。有没有人有任何关于如何从 R 中实现这一点的指示?

更详细一点,这里是 R 停止工作的点 -

shapes <- readShapeSpatial("tl_2013_us_zcta510.shp")

(其中 shp 文件是人口普查/TIGER)形状文件。

编辑 - 提供更多细节。我试图首先读取 TIGER 形状文件,希望将此空间数据集与我的数据结合起来并最终绘制。尝试读取形状文件时,我一开始就遇到了问题。下面是带有输出的代码
require(maptools)
shapes<-readShapeSpatial("tl_2013_us_zcta510.shp")

Error: cannot allocate vector of size 317 Kb

最佳答案

有几个关于使用 R 制作 map 的示例和教程,但大多数都非常笼统,不幸的是,大多数 map 项目都有细微差别,会产生难以理解的问题。你的就是一个很好的例子。

我遇到的最大问题是美国人口普查局整个美国的邮政编码列表区域 shapefile 很大:~800MB。使用 readOGR(...) 加载时R SpatialPolygonDataFrame 对象大约为 913MB。尝试处理这种大小的文件(例如,使用 fortify(...) 转换为数据帧),至少在我的系统上,会导致您在上面确定的错误。因此,解决方案是根据实际数据中的邮政编码对文件进行子集化。

这张 map :



是使用以下代码根据您的数据制作的。

library(rgdal)
library(ggplot2)
library(stringr)
library(RColorBrewer)

setwd("<directory containing shapfiles and sample data>")

data <- read.csv("Sample.csv",header=T) # your sample data, downloaded as csv
data$ZIP <- str_pad(data$ZIP,5,"left","0") # convert ZIP to char(5) w/leading zeros

zips <- readOGR(dsn=".","tl_2013_us_zcta510") # import zip code polygon shapefile
map <- zips[zips$ZCTA5CE10 %in% data$ZIP,] # extract only zips in your Sample.csv
map.df <- fortify(map) # convert to data frame suitable for plotting
# merge data from Samples.csv into map data frame
map.data <- data.frame(id=rownames(map@data),ZIP=map@data$ZCTA5CE10)
map.data <- merge(map.data,data,by="ZIP")
map.df <- merge(map.df,map.data,by="id")
# load state boundaries
states <- readOGR(dsn=".","gz_2010_us_040_00_5m")
states <- states[states$NAME %in% c("New York","New Jersey"),] # extract NY and NJ
states.df <- fortify(states) # convert to data frame suitable for plotting

ggMap <- ggplot(data = map.df, aes(long, lat, group = group))
ggMap <- ggMap + geom_polygon(aes(fill = Probability_1))
ggMap <- ggMap + geom_path(data=states.df, aes(x=long,y=lat,group=group))
ggMap <- ggMap + scale_fill_gradientn(name="Probability",colours=brewer.pal(9,"Reds"))
ggMap <- ggMap + coord_equal()
ggMap

说明:
rgdal包有助于从 ESRI 形状文件创建 R 空间对象。在您的情况下,我们将多边形 shapefile 导入 R 中的 SpatialPolygonDataFrame 对象。后者有两个主要部分:多边形部分,其中包含将连接以在 map 上创建多边形的纬度和经度点,以及数据部分其中包含有关多边形的信息(因此,每个多边形一行)。例如,如果我们调用空间对象 map ,那么这两部分可以引用为 map@polygonsmap@data .制作等值线 map 的基本挑战是关联来自 Sample.csv 的数据。文件,带有相关的多边形(邮政编码)。

所以基本的工作流程如下:
1. Load polygon shapefiles into Spatial object ( => zips)
2. Subset if appropriate ( => map).
3. Convert to data frame suitable for plotting ( => map.df).
4. Merge data from Sample.csv into map.df.
5. Draw the map.

第 4 步是导致所有问题的原因。首先,我们必须将邮政编码与每个多边形相关联。那么我们要关联 Probability_1每个邮政编码。这是一个三步过程。

空间数据文件中的每个多边形都有一个唯一的 ID,但这些 ID 不是邮政编码。多边形 ID 作为行名称存储在 map@data 中.邮政编码存储在 map@data , 在 ZCTA5CE10 列中.所以首先我们必须创建一个关联 map@data 的数据框。行名称 ( id ) 和 map@data$ZCTA5CE10 ( ZIP )。然后我们合并您的 Sample.csv结果使用两个数据帧中的 ZIP 字段。然后我们将结果合并到 map.df .这可以在 3 行代码中完成。

绘制 map 涉及告诉 ggplot 使用什么数据集(map.df),x 和 y 使用哪些列(long 和 lat)以及如何按多边形对数据进行分组(group=group)。栏目 long , lat , 和 groupmap.df都是通过调用 fortify(...) 创建的.调用 geom_polygon(...)告诉 ggplot 绘制多边形并使用 map.df$Probability_1 中的信息进行填充.调用 geom_path(...)告诉 ggplot 创建一个具有状态边界的层。调用 scale_fill_gradientn(...)告诉 ggplot 使用基于颜色啤酒“红色”调色板的配色方案。最后,调用 coord_equal(...)告诉 ggplot 对 x 和 y 使用相同的比例,这样 map 就不会失真。

注意:状态边界层,使用 US States TIGER file .

关于r - R 中的等值线图 - TIGER Shapefile 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20774732/

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