chooseCRANmirror(graphics=FALSE, ind=1)
knitr::opts_chunk$set(echo = TRUE)
# загрузка пакетов
library('R.utils') # gunzip() для распаковки архивов
library('sp') # функция spplot()
library('ggplot2') # функция ggplot()
library('RColorBrewer') # цветовые палитры
require('rgdal') # функция readOGR()
library('broom') # функция tidy()
require('dplyr') # функция join()
library('scales') # функция pretty_breaks()
## установка и сборка пакета «gpclib»
## установить RTools (recommended) отсюда:
## http://cran.r-project.org/bin/windows/Rtools/
install.packages('gpclib', type = 'source')
library('gpclib')
library('maptools')
gpclibPermit()
## [1] TRUE
Согласно заданию необходимо построить 2 карты:
-> карту-хороплет регионов РФ, построенная функцией spplot по данным сборников “Регионы России” (согласно моему варианту, один показатель из раздела “Уровень жизни населения”); -> карту-хороплет муниципальных районов региона РФ, построенная функцией ggplot() по данным базы показателей муниципальных образований.
Сначала мы загрузим необходимые файлы, обработаем их, и выберем подходящие.
# ссылка на файл
ShapeFileURL <- 'https://biogeo.ucdavis.edu/data/gadm3.6/shp/gadm36_RUS_shp.zip'
# создаём директорию 'data' и скачиваем
if (!file.exists('./data')) dir.create('./data')
if (!file.exists('./data/36_RUS_shp.zip')) {
download.file(ShapeFileURL,
destfile = './data/36_RUS_shp.zip')}
#Файл, который мы скачали – это архив формата «.zip». Распакуем его.
# распаковать архив
unzip('./data/36_RUS_shp.zip', exdir = './data/36_RUS_shp')
# посмотреть список файлов распакованного архива
dir('./data/36_RUS_shp')
## [1] "gadm36_RUS_0.cpg" "gadm36_RUS_0.dbf" "gadm36_RUS_0.prj"
## [4] "gadm36_RUS_0.shp" "gadm36_RUS_0.shx" "gadm36_RUS_1.cpg"
## [7] "gadm36_RUS_1.dbf" "gadm36_RUS_1.prj" "gadm36_RUS_1.shp"
## [10] "gadm36_RUS_1.shx" "gadm36_RUS_2.cpg" "gadm36_RUS_2.dbf"
## [13] "gadm36_RUS_2.prj" "gadm36_RUS_2.shp" "gadm36_RUS_2.shx"
## [16] "gadm36_RUS_3.cpg" "gadm36_RUS_3.dbf" "gadm36_RUS_3.prj"
## [19] "gadm36_RUS_3.shp" "gadm36_RUS_3.shx" "license.txt"
# прочитать данные уровней 0, 1, 2
Regions1 <- readOGR("./data/36_RUS_shp/gadm36_RUS_1.shp")
## OGR data source with driver: ESRI Shapefile
## Source: "C:\Users\Anastasia_\Documents\RStudio\data\36_RUS_shp\gadm36_RUS_1.shp", layer: "gadm36_RUS_1"
## with 83 features
## It has 10 fields
plot(Regions1, main = 'adm1', asp = 1.8)
Рассмотрим наши данные и загрузим данные с средней заработной платой на душу населения по регионам в рублях. Объединим все в один файл и построим карту, где цветом будут показаны разные объемы
# имена слотов
slotNames(Regions1)
## [1] "data" "polygons" "plotOrder" "bbox" "proj4string"
# слот "данные"
head(Regions1@data)
## GID_0 NAME_0 GID_1 NAME_1
## 0 RUS Russia RUS.1_1 Adygey
## 1 RUS Russia RUS.2_1 Altay
## 2 RUS Russia RUS.3_1 Amur
## 3 RUS Russia RUS.4_1 Arkhangel'sk
## 4 RUS Russia RUS.5_1 Astrakhan'
## 5 RUS Russia RUS.6_1 Bashkortostan
## VARNAME_1
## 0 Adygea|Adygeya|Adygheya|Republic of Adygeya|Adygeyskaya A.Obl.|Respublika Adygeya
## 1 Altayskiy Kray
## 2 Amurskaya Oblast
## 3 Arcangelo|Archangel|Archangelsk|Arkhangelskaya Oblast
## 4 Astrachan|Astrakhanskaya Oblast
## 5 Bashkir|Bashkiriya|Bashkirskaya A.S.S.R.|Republic of Bashkortostan|Respublika Bashkortostan
## NL_NAME_1 TYPE_1 ENGTYPE_1 CC_1
## 0 Республика Адыгея Respublika Republic <NA>
## 1 АлтаР\271СЃРєРёР\271 РєСЂР°Р\271 Kray Territory <NA>
## 2 Амурская область Oblast Region <NA>
## 3 Архангельская область Oblast Region <NA>
## 4 Астраханская область Oblast Region <NA>
## 5 Республика БаС\210кортостан Respublika Republic <NA>
## HASC_1
## 0 RU.AD
## 1 RU.AL
## 2 RU.AM
## 3 RU.AR
## 4 RU.AS
## 5 RU.BK
dat1 <- Regions1@data
# делаем фактор из имён областей (т.е. нумеруем их)
Regions1@data$NAME_1 <- as.factor(Regions1@data$NAME_1)
# результат
Regions1@data$NAME_1
## [1] Adygey Altay Amur
## [4] Arkhangel'sk Astrakhan' Bashkortostan
## [7] Belgorod Bryansk Buryat
## [10] Chechnya Chelyabinsk Chukot
## [13] Chuvash City of St. Petersburg Dagestan
## [16] Gorno-Altay Ingush Irkutsk
## [19] Ivanovo Kabardin-Balkar Kaliningrad
## [22] Kalmyk Kaluga Kamchatka
## [25] Karachay-Cherkess Karelia Kemerovo
## [28] Khabarovsk Khakass Khanty-Mansiy
## [31] Kirov Komi Kostroma
## [34] Krasnodar Krasnoyarsk Kurgan
## [37] Kursk Leningrad Lipetsk
## [40] Maga Buryatdan Mariy-El Mordovia
## [43] Moscow City Moskva Murmansk
## [46] Nenets Nizhegorod North Ossetia
## [49] Novgorod Novosibirsk Omsk
## [52] Orel Orenburg Penza
## [55] Perm' Primor'ye Pskov
## [58] Rostov Ryazan' Sakha
## [61] Sakhalin Samara Saratov
## [64] Smolensk Stavropol' Sverdlovsk
## [67] Tambov Tatarstan Tomsk
## [70] Tula Tuva Tver'
## [73] Tyumen' Udmurt Ul'yanovsk
## [76] Vladimir Volgograd Vologda
## [79] Voronezh Yamal-Nenets Yaroslavl'
## [82] Yevrey Zabaykal'ye
## 83 Levels: Adygey Altay Amur Arkhangel'sk Astrakhan' ... Zabaykal'ye
reg <- read.csv('C:/Users/Anastasia_/Documents/RStudio/region.csv', stringsAsFactors = F, sep = ';')
month_pay <- reg$month_pay
Regions1@data <- merge(reg, Regions1@data, by.x='reg', by.y='NAME_1')
# задаём палитру
mypalette <- colorRampPalette(c('whitesmoke', 'blue'))
spplot(Regions1, 'month_pay',
col.regions = mypalette(20), # цветовая шкала
# (20 градаций)
col = 'coral4', # цвет контурных линий
par.settings = list(axis.line = list(col = NA)) # без
# осей
)
По графику видно, что самая низкая средняя заробатная плата в республике Дагестан(21491 рублей на душу населения), самая высокая - Чукотском АО (91995 руб на душу населения).
Теперь построим график согласно 2 пункту.
rm(Regions1)
Regions <- readOGR("./data/36_RUS_shp/gadm36_RUS_1.shp")
## OGR data source with driver: ESRI Shapefile
## Source: "C:\Users\Anastasia_\Documents\RStudio\data\36_RUS_shp\gadm36_RUS_1.shp", layer: "gadm36_RUS_1"
## with 83 features
## It has 10 fields
# (названия регионов из столбца NAME_1)
Regions@data$id <- Regions@data$NAME_1
# преобразовываем SpatialPolygonsDataFrame в data.frame
Regions.points <- tidy(Regions, region = 'id')
# добавляем к координатам сведения о регионах
Regions.df <- merge(Regions.points, Regions@data, by = 'id')
# добавляем к координатам значения показателя для заливки
# (численность населения из фрейма stat.Regions)
reg$id <- reg$reg
Regions.df <- merge(Regions.df,
reg[, c('id',
'munizp_obr')],
by = 'id')
names(Regions.df)
## [1] "id" "long" "lat" "order" "hole"
## [6] "piece" "group" "GID_0" "NAME_0" "GID_1"
## [11] "NAME_1" "VARNAME_1" "NL_NAME_1" "TYPE_1" "ENGTYPE_1"
## [16] "CC_1" "HASC_1" "munizp_obr"
# координаты центров полигонов (для подписей регионов)
centroids.df <- as.data.frame(coordinates(Regions))
# названия регионов (идут в том же порядке, в каком
# считались центроиды
centroids.df$id <- Regions@data$id
# заменяем имена переменных, созданные по умолчанию
colnames(centroids.df) <- c('long', 'lat', 'id')
# создаём график
gp <- ggplot() +
geom_polygon(data = Regions.df,
aes(long, lat, group = group,
fill = munizp_obr)) +
geom_path(data = Regions.df,
aes(long, lat, group = group),
color = 'coral4') +
coord_map(projection = 'mercator') +
scale_fill_distiller(palette = 'OrRd',
direction = 1,
breaks = pretty_breaks(n = 5)) +
labs(x = 'Долгота', y = 'Широта',
title = "Количество муниципальнх образований")
# выводим график
gp
Меньше всего муниципальных образований в Санкт-Петербурге (11), больше всего - в республике Татарстан (956).