STWURek #3: kaRtogRafia - druga przygoda z mapami w R

Trzeci STWURek odbył się 19.04.2017 - tradycyjnie po spotkaniu prezentujemy materiały z prelekcji.

Kody znajdują się w repozytorium spotkania: https://github.com/STWUR/STWUR-2017-04-19

Dwa sposoby tworzenia map w R

  • Przez ściągnięcie mapy z google lub open street maps i nałożenie punktów
  • Przez narysowanie kształtów regionów (województw, krajów itp.)

Ściąganie mapy z google lub open street maps {.flexbox .vcenter}

library(ggmap)
wroclaw_mapa <- get_map(location = "wrocław", zoom = 10)
ggmap(wroclaw_mapa, extent = "normal")

plot of chunk unnamed-chunk-1

Kartogram (choropleth)

ggplot(data = plotData, mapping = aes(x = long, y = lat, group = group)) +
  geom_polygon(aes(fill = procent_wyzsze_wyksztalcenie), color = "white", size = 0.1) +
  facet_wrap(facets = ~rok, ncol = 4) +
  scale_fill_distiller("%", palette = "RdYlGn", breaks = pretty_breaks(n = 6),
                       trans = "reverse", labels = percent) 

Czego nauczymy się dzisiaj?

  • Wczytywanie plików shp file
  • Poprawne rysowanie map za pomocą pakietu ggplot

Czym jest mapa?

  • określonym matematycznie obrazem przestrzeni odzwierciedlającym rozmieszczenie obiektów i zjawisk geograficznych w zmniejszeniu (skala) i rzucie prostokątnym (odwzorowanie)
  • zbiorem znaków kartograficznych i napisów, służących do prezentacji obiektów i zjawisk geograficznych
  • odzwierciedla rzeczywistość w specyficznie uogólniony sposób – może być traktowana jako jej model.

Na podstawie wykładu z Podstaw Kartografii dr. Waldemara Spalleka

(matematyczny) problem z mapami

Nie istnieją odwzorowania, które wiernie przenosiłyby powierzchnię kuli na płaszczyznę mapy bez deformacji. Dlatego powstają zniekształcenia kątów, powierzchni i odległości.

Wczytywanie mapy do R

require(rgdal) #funkcja readOGR
require(rgeos) #funkcja gSimplify i spTransform
EU_NUTS <- readOGR(dsn = "./data/NUTS_2010_03M_SH/Data/", layer = "NUTS_RG_03M_2010")
## OGR data source with driver: ESRI Shapefile 
## Source: "./data/NUTS_2010_03M_SH/Data/", layer: "NUTS_RG_03M_2010"
## with 1920 features
## It has 4 fields

W jakim układzie współrzędnych (Coordinate Reference System - CRS) podane są nasze punkty?

proj4string(EU_NUTS)
## [1] "+proj=longlat +ellps=GRS80 +no_defs"

Przekształcenia na SpatialPolygons

Zmiana układu współrzędnych na domyślny w pakiecie ggmap (zgodny z googlem)

EU_NUTS <- spTransform(EU_NUTS, CRS("+proj=longlat +datum=WGS84"))

Podzbiór polygons, tak jak na zwykłej data.frame

czy_id_zawiera_pl <- grepl("PL", EU_NUTS@data$NUTS_ID)
PL_NUTS <- EU_NUTS[czy_id_zawiera_pl, ]

Zmniejszenie dokładności mapy

PL_NUTS <- gSimplify(PL_NUTS, tol = 100, topologyPreserve=TRUE)

Kartogram z uwzględnieniem układu odniesienia

load("data/ksztalt_wojewodztw_data_frame.Rdata")
wojewodztwa_nazwy_kody <- wojewodztwa_nazwy_kody %>%
  mutate(teryt = as.numeric(as.character(teryt)),
         woj = iconv(woj))
internet <- read.csv("internet_samotnosc.csv")
str(internet)
## 'data.frame':	202 obs. of  6 variables:
##  $ X            : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ rok          : int  2003 2003 2003 2003 2003 2003 2003 2003 2003 2003 ...
##  $ woj          : int  2 2 4 4 6 6 8 8 10 10 ...
##  $ plec         : int  1 2 1 2 1 2 1 2 1 2 ...
##  $ internet_godz: num  11.55 6.6 5.56 3.2 8.74 ...
##  $ samotnosc    : num  1.86 1.76 1.86 1.8 1.8 ...

Kartogram z uwzględnieniem układu odniesienia

internet <- internet %>%
    inner_join(wojewodztwa_nazwy_kody, by = c("woj"="teryt"))
plotData <- inner_join(Wojewodztwa, internet, by = "id")

Rysowanie mapy

ggplot(data = plotData, mapping = aes(x = long, y = lat)) +
  geom_polygon(mapping = aes(group = group, fill = internet_godz)) + #rysujemy wielokąty
  coord_map() + #ustawiamy układ współrzędnych
  scale_fill_distiller("h", palette = "YlGn", breaks = pretty_breaks(n = 6), 
                       trans = "reverse") + #ustalamy paletę kolorów i skalę
  facet_wrap(~rok) + #ustawiamy obok siebie wykresy dla poszczególnych lat
  guides(fill = guide_legend(reverse = TRUE)) + 
  theme_map(base_size = 18) #sugerowany styl wyglądu mapy

Rysowanie mapy

plot of chunk unnamed-chunk-12