【问题标题】:Colorize the map of Russia depending on the variable in R根据 R 中的变量为俄罗斯地图着色
【发布时间】:2018-04-08 23:29:43
【问题描述】:

我有一张俄罗斯地图

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") 

【问题讨论】:

    标签: r maps


    【解决方案1】:

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

    请注意,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

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

    【讨论】:

      猜你喜欢
      • 2016-09-30
      • 2013-03-10
      • 2013-03-10
      • 1970-01-01
      • 2015-12-03
      • 1970-01-01
      • 2018-06-06
      • 1970-01-01
      • 2021-10-01
      相关资源
      最近更新 更多