If you do not have R and RStudio on your computer, proceed as follows:
Jalankan R
Jika terhubung ke internet:
install.packages(“namapackage”)
Contoh:
install.packages(c("sp", "gstat"))
Jika sudah download binary (*.zip):
install.packages(“drive:/namafile.zip”,repos=NULL)
Contoh:
install.packages(“C:/Program Files/R/nama file.zip”,repos=NULL)
atau melalui menu: Packages > Install packages(s) from local files…
In this document, input and output are shown as follows:
2 * pi/360
## [1] 0.01745329
This means: when R prompts for input:
2*pi/360
, and press the Enter[1]
), with the value 0.017453
Note: that pi is constant value known to R.
sp
and gstat
packages into the workspace.You can load these in RStudio by checking the small checkbox next to the packages name in the Packages tab; see Figure 3.
You can also load these this from the R console with the library
function. This loads a packages into the R workspace:
library(sp)
library(gstat)
meuse
dataset into the workspace.The data function loads a dataset. We show the contents of the workspace before and after with the ls()
function:
ls()
## character(0)
data(meuse)
ls()
## [1] "meuse"
What Objects Were in the workspace before and after loading the
meuse
dataset?
The str()
function shows the structure of an R object:
str(meuse)
## 'data.frame': 155 obs. of 14 variables:
## $ x : num 181072 181025 181165 181298 181307 ...
## $ y : num 333611 333558 333537 333484 333330 ...
## $ cadmium: num 11.7 8.6 6.5 2.6 2.8 3 3.2 2.8 2.4 1.6 ...
## $ copper : num 85 81 68 81 48 61 31 29 37 24 ...
## $ lead : num 299 277 199 116 117 137 132 150 133 80 ...
## $ zinc : num 1022 1141 640 257 269 ...
## $ elev : num 7.91 6.98 7.8 7.66 7.48 ...
## $ dist : num 0.00136 0.01222 0.10303 0.19009 0.27709 ...
## $ om : num 13.6 14 13 8 8.7 7.8 9.2 9.5 10.6 6.3 ...
## $ ffreq : Factor w/ 3 levels "1","2","3": 1 1 1 1 1 1 1 1 1 1 ...
## $ soil : Factor w/ 3 levels "1","2","3": 1 1 1 2 2 2 2 1 1 2 ...
## $ lime : Factor w/ 2 levels "0","1": 2 2 2 1 1 1 1 1 1 1 ...
## $ landuse: Factor w/ 15 levels "Aa","Ab","Ag",..: 4 4 4 11 4 11 4 2 2 15 ...
## $ dist.m : num 50 30 150 270 380 470 240 120 240 420 ...
meuse
datasethelp(meuse)
Description
This data set gives locations and topsoil heavy metal concentrations, along with a number of soil and landscape variables at the observation locations, collected in a flood plain of the river Meuse, near the village of Stein (NL). Heavy metal concentrations are from composite samples of an area of approximately 15 m x 15 m.
Usage
data(meuse)
Format
This data frame contains the following columns:
x
a numeric vector; Easting (m) in Rijksdriehoek (RDH) (Netherlands topographical) map coordinates
y
a numeric vector; Northing (m) in RDH coordinates
coordinates(meuse) <- c("x", "y")
plot(meuse)
title("points")
data(meuse.riv)
meuse.1st <- list(Polygons(list(Polygon(meuse.riv)),"meuse.riv"))
meuse.sr <- SpatialPolygons(meuse.1st)
plot(meuse.sr, col = "grey")
title("polygons")
data(meuse.grid)
coordinates(meuse.grid) <- c("x", "y")
meuse.grid <- as(meuse.grid, "SpatialPixels")
image(meuse.grid, col = "grey")
title("grid")
image(meuse.grid, col = "lightgrey")
plot(meuse.sr, col = "grey", add = TRUE)
plot(meuse,add = TRUE)
f <- system.file("external/test.grd", package="raster")
library(raster)
r <- raster(f)
plot(r)
Impor data:
datapop <- read.csv('http://bit.ly/Popgrowth2000', header=T, sep=',')
Dimensi data:
dim(datapop)
## [1] 293 5
Struktur data:
str(datapop)
## 'data.frame': 293 obs. of 5 variables:
## $ City : chr "Abidjan" "Adana" "Addis Ababa" "Adelaide" ...
## $ Country : chr "Cote d'Ivoire" "Turkey" "Ethiopia" "Australia" ...
## $ Latitude : num 5.31 37 9.02 -34.93 23.04 ...
## $ Longitude : num -4.01 35.33 38.75 138.6 72.57 ...
## $ PopGrowth_2000: int 1929000 1041000 2424000 1092000 2954000 1582000 3339000 2562000 1135000 1147000 ...
Tabel data:
View(datapop)
City | Country | Latitude | Longitude | PopGrowth_2000 |
---|---|---|---|---|
Abidjan | Cote d’Ivoire | 5.31 | -4.013 | 1929000 |
Adana | Turkey | 37 | 35.33 | 1041000 |
Addis Ababa | Ethiopia | 9.025 | 38.75 | 2424000 |
Adelaide | Australia | -34.93 | 138.6 | 1092000 |
Ahmadabad | India | 23.04 | 72.57 | 2954000 |
Aleppo | Syria | 36.22 | 37.17 | 1582000 |
Alexandria | Egypt | 31.2 | 29.92 | 3339000 |
Algiers | Algeria | 36.75 | 3.042 | 2562000 |
Almaty | Kazakhstan | 43.26 | 76.91 | 1135000 |
Amman | Jordan | 31.96 | 35.95 | 1147000 |
coordinates(datapop) <- c("Longitude","Latitude")
plot(datapop)
size<-datapop$PopGrowth_2000/sum(datapop$PopGrowth_2000)
plot(datapop,pch=20, col="steelblue", cex=size*100)
Install Packages:
install.packages("rworldmap")
library(rworldmap)
data(package="rworldmap")
data(countriesCoarse,envir=environment(),package="rworldmap")
Struktur data:
str(countriesCoarse)
Peta dunia:
plot(countriesCoarse)
## Warning in wkt(obj): CRS object has no comment
Peta dunia + Data pertumbuhan penduduk:
plot(datapop,add=T, pch=20)
## Warning in wkt(obj): CRS object has no comment
Coba tampilkan data pertumbuhan penduduk dengan ukuran titik sesuai dengan besarnya pertumbuhan, pada peta dunia.!
Rasterize:
library(raster)
r <- raster(datapop)
res(r)<-c(5,5)
nc <- rasterize(coordinates(datapop), r, fun=mean, background=NA)
plot(nc)
plot(countriesCoarse, add=TRUE)
install.packages("ggmap")
library(ggmap)
map <- get_map(location = 'Indonesia', zoom = 4)
plot(map)
datapop<-read.csv('http://bit.ly/Popgrowth2000', header=T,
sep=',')
ggmap(map)+geom_point(aes(x = Longitude, y = Latitude),
data = pop_ina,col="red")
Cara lain menampilkan peta
Ilustrasi di bawah ini dirujuk dari Data Technik (2019). Data tersedia pada package datasets
, berisi 50 observasi dan 9 peubah.
states<-as.data.frame(state.x77)
head(states)
## Population Income Illiteracy Life Exp Murder HS Grad Frost Area
## Alabama 3615 3624 2.1 69.05 15.1 41.3 20 50708
## Alaska 365 6315 1.5 69.31 11.3 66.7 152 566432
## Arizona 2212 4530 1.8 70.55 7.8 58.1 15 113417
## Arkansas 2110 3378 1.9 70.66 10.1 39.9 65 51945
## California 21198 5114 1.1 71.71 10.3 62.6 20 156361
## Colorado 2541 4884 0.7 72.06 6.8 63.9 166 103766
Pertama, kita akan coba menampilkan visualisasi data populasi di U.S menggunakan fungsi di dalam package ggplot2
.
library(ggplot2)
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v tibble 3.1.6 v dplyr 1.0.7
## v tidyr 1.1.4 v stringr 1.4.0
## v readr 2.1.0 v forcats 0.5.1
## v purrr 0.3.4
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x tidyr::extract() masks raster::extract()
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
## x dplyr::select() masks raster::select()
states$region <- tolower(rownames(states))
states_map <- map_data("state")
fact_join <- left_join(states_map, states, by = "region")
ggplot(fact_join, aes(long, lat, group = group))+
geom_polygon(aes(fill = Population), color = "white")+
scale_fill_viridis_c(option = "C")+
theme_classic()
Kita dapat pula mengganti pewarnaan grafik seperti di bawah ini.
ggplot(fact_join, aes(long, lat, group = group))+
geom_polygon(aes(fill = Income), color = "white")+
scale_fill_viridis_c(option = "C")+
theme_classic()
Berikut apabila ingin menampilkan peubah lain, misalnya usia harapan hidup.
fact_join$`Life Exp` <- as.numeric(fact_join$`Life Exp`)
ggplot(fact_join, aes(long, lat, group = group))+
geom_polygon(aes(fill = `Life Exp`), color = "white")+
scale_fill_viridis_c(option = "C")+
theme_classic()
Sebagai ilustrasi, akan digunakan data yang tersedia pada laman http://rtwilson.com/downloads/SnowGIS_SHP.zip. Pastikan Anda mengekstrak folder data tersebut pada direktori yang Anda inginkan. Selanjutnya, package rgdal akan digunakan untuk membaca data SnowGIS tersebut.
library(rgdal)
Untuk melihat file apa saja yang ada di dalam folder shapefile tersebut, kita dapat menggunakan fungsi list.files()
dan tuliskan direktori Anda masing-masing, ini dikenal sebagai dsn.
dsn<-paste("D:/Dept.STK/Courses/Statistika Spasial (S2)/TA 2020-2021/Semester Genap/P1 - Genap 2021/SnowGIS_SHP")
list.files(dsn)
## [1] "Cholera_Deaths.dbf" "Cholera_Deaths.prj"
## [3] "Cholera_Deaths.sbn" "Cholera_Deaths.sbx"
## [5] "Cholera_Deaths.shp" "Cholera_Deaths.shx"
## [7] "OSMap.tfw" "OSMap.tif"
## [9] "OSMap_Grayscale.tfw" "OSMap_Grayscale.tif"
## [11] "OSMap_Grayscale.tif.aux.xml" "OSMap_Grayscale.tif.ovr"
## [13] "Pumps.dbf" "Pumps.prj"
## [15] "Pumps.sbx" "Pumps.shp"
## [17] "Pumps.shx" "README.txt"
## [19] "SnowMap.tfw" "SnowMap.tif"
## [21] "SnowMap.tif.aux.xml" "SnowMap.tif.ovr"
Terlihat pada output di atas bahwa folder tersebut memuat beberapa shapefile, di antaranya terdapat 6 file dengan nama Cholera_Deathsdan 5 file bernama Pumps. Kedua set data tersebut dikenal sebagai layer.
ogrListLayers(dsn)
## [1] "Cholera_Deaths" "Pumps"
## attr(,"driver")
## [1] "ESRI Shapefile"
## attr(,"nlayers")
## [1] 2
Kita dapat menggunakan fungsi ogrInfo() untuk mengetahui informasi mengenai layer tersebut.
ogrInfo(dsn, layer = "Cholera_Deaths")
## Warning in OGRSpatialRef(dsn, layer, morphFromESRI = morphFromESRI, dumpSRS =
## dumpSRS, : Discarded datum OSGB_1936 in Proj4 definition: +proj=tmerc +lat_0=49
## +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +units=m +no_defs
## Source: "D:\Dept.STK\Courses\Statistika Spasial (S2)\TA 2020-2021\Semester Genap\P1 - Genap 2021\SnowGIS_SHP", layer: "Cholera_Deaths"
## Driver: ESRI Shapefile; number of rows: 250
## Feature type: wkbPoint with 2 dimensions
## Extent: (529160.3 180857.9) - (529655.9 181306.2)
## CRS: +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +units=m +no_defs
## LDID: 87
## Number of fields: 2
## name type length typeName
## 1 Id 0 6 Integer
## 2 Count 0 4 Integer
CholeraDeaths <- readOGR(dsn, layer = "Cholera_Deaths")
## Warning in OGRSpatialRef(dsn, layer, morphFromESRI = morphFromESRI, dumpSRS =
## dumpSRS, : Discarded datum OSGB_1936 in Proj4 definition: +proj=tmerc +lat_0=49
## +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +units=m +no_defs
## OGR data source with driver: ESRI Shapefile
## Source: "D:\Dept.STK\Courses\Statistika Spasial (S2)\TA 2020-2021\Semester Genap\P1 - Genap 2021\SnowGIS_SHP", layer: "Cholera_Deaths"
## with 250 features
## It has 2 fields
summary(CholeraDeaths)
## Object of class SpatialPointsDataFrame
## Coordinates:
## min max
## coords.x1 529160.3 529655.9
## coords.x2 180857.9 181306.2
## Is projected: TRUE
## proj4string :
## [+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000
## +y_0=-100000 +ellps=airy +units=m +no_defs]
## Number of points: 250
## Data attributes:
## Id Count
## Min. :0 Min. : 1.000
## 1st Qu.:0 1st Qu.: 1.000
## Median :0 Median : 1.000
## Mean :0 Mean : 1.956
## 3rd Qu.:0 3rd Qu.: 2.000
## Max. :0 Max. :15.000
Selanjutnya kita dapat memeriksa class
dari data CholeraDeaths
tersebut.
class(CholeraDeaths)
## [1] "SpatialPointsDataFrame"
## attr(,"package")
## [1] "sp"
Data tersebut merupakan SpatialPointsDataFrame yang termasuk S4 class, maka untuk mengakses data slot perlu digunakan notasi @
.
str(CholeraDeaths@data)
## 'data.frame': 250 obs. of 2 variables:
## $ Id : int 0 0 0 0 0 0 0 0 0 0 ...
## $ Count: int 3 2 1 1 4 2 2 2 3 2 ...
Fungsi plot()
dapat digunakan untuk membuat grafik paling sederhana dari data CholeraDeaths
.
par(mfrow=c(1,2))
plot(CholeraDeaths)
plot(CholeraDeaths, pch=20, col="steelblue")
Perhatikan bahwa plot di atas hanya menunjukkan sebaran titik spasial, tanpa memberikan informasi yang jelas tentang lokasi data tersebut. Jika kita memiliki peta dalam bentuk data polygon, kita dapat mengimpor data tersebut dengan cara yang sama (seandainya datanya berupa shapefile), kemudian kita plot peta baru kemudian plot data titik seperti di atas.
Alternatif lainnya jika kita tidak ingin menggunakan peta polygon dari shapefile, kita dapat menggunakan beberapa package yang tersedia di R software, seperti ggmap
, OpenStreetMap
, leaflet
, atau yang lain. Namun perhatikan bahwa untuk bisa menggunakan package OpenStreetMap, Anda harus memastikan bahwa jika Anda menggunakan R 64-bit maka Java yang terinstall di PC Anda juga harus sesuai, yaitu 64-bit.
Berikut ini akan ditunjukkan salah satu cara menampilkan peta dengan memanfaatkan package leaflet
.
library(leaflet)
map <- leaflet() %>% setView(lng = -0.13659, lat =51.51328 , zoom = 12)
map %>% addTiles()
Sebelum kedua peta dan data titik digabungkan. Pastikan terlebih dahulu apakah koordinat yang digunakan menggunakan skala yang sama.
head(coordinates(CholeraDeaths))
## coords.x1 coords.x2
## [1,] 529308.7 181031.4
## [2,] 529312.2 181025.2
## [3,] 529314.4 181020.3
## [4,] 529317.4 181014.3
## [5,] 529320.7 181007.9
## [6,] 529336.7 181006.0
Seperti terlihat di atas, koordinat pada data CholeraDeaths
diukur pada skala yang berbeda dengan peta yang diambil dari package leaflet
. Terdapat beberapa macam coordinate reference system (CRS), beberapa di antaranya yang cukup populer adalah suatu set EPSG (European Petroleum Survey Group) berikut:
EPSG:4326 juga dikenal sebagai WGS84, ukuran standard yang digunakan pada sistem GPS dan Google Earth.
EPSG:3857 digunakan pada Google Maps, Open Street Maps, dsb.
EPSG:27700 juga dikenal sebagai OSGB 1936, atau British National Grid: United Kingdom Ordnance Survey.
cholera_latlong <- CholeraDeaths %>%
spTransform(CRS("+init=epsg:4326"))
leaflet(data = CholeraDeaths) %>%
addTiles() %>%
addMarkers(cholera_latlong@coords[,1], cholera_latlong@coords[,2])
Dapat dilihat di atas, bahwa setelah koordinatnya disamakan, kita dapat menampilkan data CholeraDeaths
pada peta yang diperoleh dari Open Street Map
melalui package leaflet.
install.packages('rgdal')
library(rgdal)
Data tersedia di http://bit.ly/ShapeFile_Jawa)
Menggunakan fungsi readOGR: readOGR(dsn=‘folder (direktori) tempat shape file disimpan’, layer=‘nama shape file (tanpa .shp extension)’)
Contoh:
jawa <- readOGR(dsn='D:/Belajar/Spasial/R/Map of Jawa (original)', layer='jawa')
Pratinjau data:
head(jawa@data)
## MISKIN KODE_KAB NAMA_KAB KODE_PROP NAMA_PROP
## 0 0 3501 Pacitan 35 Jawa Timur
## 1 0 3502 Ponorogo 35 Jawa Timur
## 2 0 3503 Trenggalek 35 Jawa Timur
## 3 0 3504 Tulungagung 35 Jawa Timur
## 4 0 3508 Lumajang 35 Jawa Timur
## 5 0 3511 Bondowoso 35 Jawa Timur
plot(jawa)
text(jawa,'NAMA_KAB',cex=0.5)
plot(jawa,col=jawa$KODE_PROP-30)
Mengganti referensi warna:
palette(rainbow(6))
plot(jawa, col=jawa$KODE_PROP-30)
palette(terrain.colors(6))
plot(jawa, col=jawa$KODE_PROP-30)