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