首页 > 解决方案 > 如何将 shapefile 与 .csv 合并并创建图形

问题描述

我正在尝试合并 shapefile 和 .csv 文件以制作选举结果图。我可以在加载 shapefile 时制作图表,但是一旦将其与 .csv 合并,它就会显示“plot.window(...) 中的错误:需要有限的 'xlim' 值”。

我一直在网上阅读,我想也许我必须将 csv 文件合并到 shapefile(我一直在将 shapefile 合并到 csv 文件)。但是,csv 文件(包含选举结果)比 shapefile(提供地区坐标)具有更多的值。如何创建更多选区以匹配选举结果?这甚至会解决我的问题,还是我还缺少其他东西?此外,数据是西班牙语,但相关值 Distritos=districts,partidos=political party,cargo=type of 选举,votos=votes。

library(maptools)
library(rgdal)
library(rgeos)
library(sf)

municipios <-readOGR("/Users/Desktop/Limite_partidos/Shapefile/Partidos.shp")

elec <- read.csv("/Users/Desktop/elections excel.csv", header = TRUE, stringsAsFactors = FALSE)


library(dplyr)
#merge datasets together
elec <-merge(elec, municipios, by=c("nam"), na.rm=TRUE)


plot(elec)

链接到选举结果 (elec)

shapefile 的链接 (municipios)

标签: rdplyrshapefilesfmaptools

解决方案


首先是一些样本数据。这应该与您在 shapefile 中读取时得到的相似。R 空间对象称为 a SpatialPolygonsDataFrame。它带有data.frame关于多边形的协变量信息。

library(sp)
Sr1  <-  Polygon(cbind(c(2,4,4,1,2),c(2,3,5,4,2)))
Sr2  <-  Polygon(cbind(c(5,4,2,5),c(2,3,2,2)))
Sr3  <-  Polygon(cbind(c(4,4,5,10,4),c(5,3,2,5,5)))
Sr4  <-  Polygon(cbind(c(5,6,6,5,5),c(4,4,3,3,4)), hole = TRUE)
Srs1  <-  Polygons(list(Sr1), "s1")
Srs2  <-  Polygons(list(Sr2), "s2")
Srs3  <-  Polygons(list(Sr3, Sr4), "s3/4")
SpP  <-  SpatialPolygons(list(Srs1,Srs2,Srs3), 1:3)
Spdf <- SpatialPolygonsDataFrame(SpP, data.frame(name = c("a", "b", "c"), row.names = c("s1", "s2", "s3/4")))

现在您有了一个可以绘制的空间对象:

plot(Spdf)

并查看data.frame您的空间对象的附加信息。在这里,您需要有一些与您的选举结果相匹配的标识符:

Spdf@data

您还有另一个带有“选举结果”的数据框(也带有此标识符)

election <- data.frame(name = c("a", "c", "b"), voted = c(0.1, 0.2, 0.3))

现在将选举结果与您的空间对象匹配,以便您绘制它:

Spdf@data$voted <- election$voted[match(Spdf$name, election$name)]

要将投票结果绘制为多边形颜色的多边形,您需要一个调色板:

Spdf@data$colour <- heat.colors(3)[as.numeric(cut(Spdf@data$voted, 3))]

然后只需绘制:

plot(Spdf, col = Spdf@data$colour)

在此处输入图像描述

您可以想象您将希望在缩放中具有 3 个以上的中断,并且您将拥有更多的多边形,但这只是一个示例。祝你好运!


推荐阅读