根据R中的变量着色俄罗斯地图

时间:2018-04-08 23:29:44

标签: r maps

我有一张俄罗斯地图细分地图

library(raster)
data <- getData('GADM', country='RUS', level=1)

http://www.gks.ru/bgd/regl/B16_14p/IssWWW.exe/Stg/d01/08-01.doc 该链接指向Word.doc,其中包含俄罗斯地区犯罪率的数据(表格)。我可以提取这些数据并在R中使用它。我想花2015年并根据犯罪率在地图上着色区域(也添加一个图例)。我怎样才能做到这一点?问题是,形状文件(NL_NAME_1)和www.gks.ru数据中的区域名称有时会有所不同。 我还有我需要的图形代码,除了这里我们有无意义的颜色:

library(sp) 
library(RColorBrewer)
data$region <- as.factor(iconv(as.character(data$NAME_1)))
spplot(data, "region", xlim=c(15,190), ylim=c(40,83),
   col.regions=colorRampPalette(brewer.pal(12, "Set3"))(85), col = "white") 

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你只需要将数据添加到空间对象中以使颜色有意义。

请注意,data是R中的保留字。因此,最好修改一下您的变量名称:

geo_data <- getData('GADM', country = 'RUS', level = 1)

让我们模拟一些数据来演示可视化策略:

set.seed(23)
geo_data@data["data_to_plot"] <- sample(1:100, length(geo_data@data$NAME_1))

使用默认的GADM预测会削减该国最东部的部分。一个简单的转换有助于使整个区域适合情节:

# fit Russian area inside the plot
geo_data_trsf <- spTransform(geo_data, CRS("+proj=longlat +lon_wrap=180"))

绘制地图选择data_to_plot而不是region

max_data_val <- max(geo_data_trsf@data$data_to_plot)
spplot(geo_data_trsf, zcol = "data_to_plot",
   col.regions = colorRampPalette(brewer.pal(12, "Set3"))(max_data_val), 
   col = "white")

为转换后的空间数据geo_data_trsf自动调整绘图限制,从而可以省略xlimylim

至于名称问题,我无法提供任何现成的解决方案。显然,该地区&#39; NL_NAME_1的名称需要一些额外的处理才能将它们用作标签。我认为,最好在代码中使用NAME_1作为标识符,以确保它不会出现编码问题。 NL_NAME_1列非常适合设置Word-data与空间对象geo_data内的数据之间的对应关系。