r - 如何将 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)
解决方案
首先是一些样本数据。这应该与您在 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 个以上的中断,并且您将拥有更多的多边形,但这只是一个示例。祝你好运!
推荐阅读
- python-3.x - 你可以附加 2 个 numpy 数组以便它们嵌套吗?
- django - 为什么在 Django Rest Framework 中删除对象仍然出现在列表中?
- bash - 目录名称中的 bash 空格使用 find 导致 ls 中的换行符
- python - 是否有与 Java 的 ActionListener 接口类似的 Python?
- parallel-processing - MPI 进程能否同时传输数据和计算其他数据?
- robotframework - 机器人框架:从报告中打开关键字
- ios - 本地通知用户信息未进入启动选项
- python - pytest:通过昂贵的操作对测试进行分组
- google-sheets - 如何在 Google Sheet 中格式化 BSC Scan API 数据?
- postgresql - postgresql 中不存在 PSQL 运算符