library(RSQLite)
library(DBI)
library(tidyverse)SD_P3
Package connect to sqlite
Data
chinook <- dbConnect (SQLite(), "C:\\Users\\User\\Documents\\Data\\Chinook_Sqlite.sqlite")
dbListTables(chinook) [1] "Album" "Artist" "Customer" "Employee"
[5] "Genre" "Invoice" "InvoiceLine" "MediaType"
[9] "Playlist" "PlaylistTrack" "Track" "Track_Media12"
[13] "Track_Media13" "Track_Media14"
customer <- tbl(src = chinook, "Customer") #mengakses tabel kebentuk dataframeSQL Query dplyr
invoice <- tbl(src=chinook,"Invoice")
invoice_country <- invoice %>%
group_by(BillingCountry) %>%
summarize(mean_invoice=mean(Total))
show_query(invoice_country)Warning: Missing values are always removed in SQL aggregation functions.
Use `na.rm = TRUE` to silence this warning
This warning is displayed once every 8 hours.
<SQL>
SELECT `BillingCountry`, AVG(`Total`) AS `mean_invoice`
FROM `Invoice`
GROUP BY `BillingCountry`
untuk menampilkan hasil operasi diatas dalam R, kita perlu melakukan konversi ke data.frame terlebih dahulu.
invoice_country %>% as.data.frame() %>% View()Penggabungan Dataset
Data
res <- tbl(src=chinook,"customer") %>%
select(CustomerId,FirstName,LastName,Country) %>%
left_join(y = tbl(src=chinook,"Invoice") %>% select(CustomerId,Total) ,
by = "CustomerId")
glimpse(res)Rows: ??
Columns: 5
Database: sqlite 3.46.0 [C:\Users\User\Documents\Data\Chinook_Sqlite.sqlite]
$ CustomerId <int> 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3,…
$ FirstName <chr> "Luís", "Luís", "Luís", "Luís", "Luís", "Luís", "Luís", "Le…
$ LastName <chr> "Gonçalves", "Gonçalves", "Gonçalves", "Gonçalves", "Gonçal…
$ Country <chr> "Brazil", "Brazil", "Brazil", "Brazil", "Brazil", "Brazil",…
$ Total <dbl> 3.98, 3.96, 5.94, 0.99, 1.98, 13.86, 8.91, 1.98, 13.86, 8.9…
data("band_members",package = "dplyr")
data("band_instruments",package = "dplyr")
data("band_instruments2",package = "dplyr")Inner join
inner_join(band_members,band_instruments,by="name")# A tibble: 2 × 3
name band plays
<chr> <chr> <chr>
1 John Beatles guitar
2 Paul Beatles bass
band_members %>%
inner_join(band_instruments,by = "name")# A tibble: 2 × 3
name band plays
<chr> <chr> <chr>
1 John Beatles guitar
2 Paul Beatles bass
Left Join
band_members %>% left_join(band_instruments)Joining with `by = join_by(name)`
# A tibble: 3 × 3
name band plays
<chr> <chr> <chr>
1 Mick Stones <NA>
2 John Beatles guitar
3 Paul Beatles bass
band_instruments_edit <- band_instruments %>% bind_rows(data.frame(name="John",plays="harmonica"))
band_instruments_edit# A tibble: 4 × 2
name plays
<chr> <chr>
1 John guitar
2 Paul bass
3 Keith guitar
4 John harmonica
band_members %>% left_join(band_instruments_edit)Joining with `by = join_by(name)`
# A tibble: 4 × 3
name band plays
<chr> <chr> <chr>
1 Mick Stones <NA>
2 John Beatles guitar
3 John Beatles harmonica
4 Paul Beatles bass
Right Join
band_members %>% right_join(band_instruments)Joining with `by = join_by(name)`
# A tibble: 3 × 3
name band plays
<chr> <chr> <chr>
1 John Beatles guitar
2 Paul Beatles bass
3 Keith <NA> guitar
Full Join
band_members %>% full_join(band_instruments)Joining with `by = join_by(name)`
# A tibble: 4 × 3
name band plays
<chr> <chr> <chr>
1 Mick Stones <NA>
2 John Beatles guitar
3 Paul Beatles bass
4 Keith <NA> guitar
semi join
band_members %>% semi_join(band_instruments)Joining with `by = join_by(name)`
# A tibble: 2 × 2
name band
<chr> <chr>
1 John Beatles
2 Paul Beatles
anti join
band_members %>% anti_join(band_instruments)Joining with `by = join_by(name)`
# A tibble: 1 × 2
name band
<chr> <chr>
1 Mick Stones
FYI
Ada kalanya Anda perlu menggabungkan data seperti band_members dan band_instruments2 dimana tidak ada nama kolom yang sama, namun sebenarnya bisa digabungkan. Maka Anda memerlukan sedikit tambahan syntax.
Misal,Anda hendak menggabungkan band_members dan band_instruments2 secara full_join, maka Anda bisa menggunakan syntax berikut ini :
full_join(band_members, band_instruments2, by = c("name" = "artist"))# A tibble: 4 × 3
name band plays
<chr> <chr> <chr>
1 Mick Stones <NA>
2 John Beatles guitar
3 Paul Beatles bass
4 Keith <NA> guitar
Data Spatial Menggunakan R
remotes::install_github("yutannihilation/ggsflabel")Skipping install of 'ggsflabel' from a github remote, the SHA1 (846ede01) has not changed since last install.
Use `force = TRUE` to force installation
library(tidyverse)
library(sf)
library(ggspatial)
library(ggplot2)
library(prettymapr)Data Spatial dengan geometri titik
Memanggil data
dcr <- st_read(dsn = "C:\\Users\\User\\Documents\\Data\\SnowGIS_SHP", layer="Cholera_Deaths")Reading layer `Cholera_Deaths' from data source
`C:\Users\User\Documents\Data\SnowGIS_SHP' using driver `ESRI Shapefile'
Simple feature collection with 250 features and 2 fields
Geometry type: POINT
Dimension: XY
Bounding box: xmin: 529160.3 ymin: 180857.9 xmax: 529655.9 ymax: 181306.2
Projected CRS: OSGB36 / British National Grid
Visualisasi dan spatial
Visualisasi statis
ggplot(data = dcr)+
geom_sf()+
#mengubah tema
theme_bw()ggplot(dcr) +
annotation_map_tile(type = "osm", zoomin = 0) +
geom_sf(aes(size = Count), alpha = 0.7)+
theme_bw()Loading required namespace: raster
Zoom: 17
Terjadi error pada sintaks diatas karena adanya perbedaan CRS pada data Cholera Death dan map tiles yang berasal dari Open Street Map. CRS pada data Cholera Death adalah OSGB36 / British National Grid. Semetara itu, CRS pada Open Street Map atau maps yang lain adalah WGS84 atau sering juga dikenal sebagai EPSG:3857. Fungsi st_crs() akan menerjemahkan dari kode EPSG ke string PROJ.4 dan WKT. Berikut sintaks untuk menampilkan string PROJ.4 dan WKT
st_crs(3857)$proj4string[1] "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs"
st_crs(3857)$wkt[1] "PROJCRS[\"WGS 84 / Pseudo-Mercator\",\n BASEGEOGCRS[\"WGS 84\",\n ENSEMBLE[\"World Geodetic System 1984 ensemble\",\n MEMBER[\"World Geodetic System 1984 (Transit)\"],\n MEMBER[\"World Geodetic System 1984 (G730)\"],\n MEMBER[\"World Geodetic System 1984 (G873)\"],\n MEMBER[\"World Geodetic System 1984 (G1150)\"],\n MEMBER[\"World Geodetic System 1984 (G1674)\"],\n MEMBER[\"World Geodetic System 1984 (G1762)\"],\n MEMBER[\"World Geodetic System 1984 (G2139)\"],\n ELLIPSOID[\"WGS 84\",6378137,298.257223563,\n LENGTHUNIT[\"metre\",1]],\n ENSEMBLEACCURACY[2.0]],\n PRIMEM[\"Greenwich\",0,\n ANGLEUNIT[\"degree\",0.0174532925199433]],\n ID[\"EPSG\",4326]],\n CONVERSION[\"Popular Visualisation Pseudo-Mercator\",\n METHOD[\"Popular Visualisation Pseudo Mercator\",\n ID[\"EPSG\",1024]],\n PARAMETER[\"Latitude of natural origin\",0,\n ANGLEUNIT[\"degree\",0.0174532925199433],\n ID[\"EPSG\",8801]],\n PARAMETER[\"Longitude of natural origin\",0,\n ANGLEUNIT[\"degree\",0.0174532925199433],\n ID[\"EPSG\",8802]],\n PARAMETER[\"False easting\",0,\n LENGTHUNIT[\"metre\",1],\n ID[\"EPSG\",8806]],\n PARAMETER[\"False northing\",0,\n LENGTHUNIT[\"metre\",1],\n ID[\"EPSG\",8807]]],\n CS[Cartesian,2],\n AXIS[\"easting (X)\",east,\n ORDER[1],\n LENGTHUNIT[\"metre\",1]],\n AXIS[\"northing (Y)\",north,\n ORDER[2],\n LENGTHUNIT[\"metre\",1]],\n USAGE[\n SCOPE[\"Web mapping and visualisation.\"],\n AREA[\"World between 85.06°S and 85.06°N.\"],\n BBOX[-85.06,-180,85.06,180]],\n ID[\"EPSG\",3857]]"
st_crs(dcr)$proj4string[1] "+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +units=m +no_defs"
st_crs(dcr)$wkt[1] "PROJCRS[\"OSGB36 / British National Grid\",\n BASEGEOGCRS[\"OSGB36\",\n DATUM[\"Ordnance Survey of Great Britain 1936\",\n ELLIPSOID[\"Airy 1830\",6377563.396,299.3249646,\n LENGTHUNIT[\"metre\",1]]],\n PRIMEM[\"Greenwich\",0,\n ANGLEUNIT[\"degree\",0.0174532925199433]],\n ID[\"EPSG\",4277]],\n CONVERSION[\"British National Grid\",\n METHOD[\"Transverse Mercator\",\n ID[\"EPSG\",9807]],\n PARAMETER[\"Latitude of natural origin\",49,\n ANGLEUNIT[\"degree\",0.0174532925199433],\n ID[\"EPSG\",8801]],\n PARAMETER[\"Longitude of natural origin\",-2,\n ANGLEUNIT[\"degree\",0.0174532925199433],\n ID[\"EPSG\",8802]],\n PARAMETER[\"Scale factor at natural origin\",0.9996012717,\n SCALEUNIT[\"unity\",1],\n ID[\"EPSG\",8805]],\n PARAMETER[\"False easting\",400000,\n LENGTHUNIT[\"metre\",1],\n ID[\"EPSG\",8806]],\n PARAMETER[\"False northing\",-100000,\n LENGTHUNIT[\"metre\",1],\n ID[\"EPSG\",8807]]],\n CS[Cartesian,2],\n AXIS[\"(E)\",east,\n ORDER[1],\n LENGTHUNIT[\"metre\",1]],\n AXIS[\"(N)\",north,\n ORDER[2],\n LENGTHUNIT[\"metre\",1]],\n USAGE[\n SCOPE[\"Engineering survey, topographic mapping.\"],\n AREA[\"United Kingdom (UK) - offshore to boundary of UKCS within 49°45'N to 61°N and 9°W to 2°E; onshore Great Britain (England, Wales and Scotland). Isle of Man onshore.\"],\n BBOX[49.75,-9.01,61.01,2.01]],\n ID[\"EPSG\",27700]]"
cholera_latlong <- dcr %>%
st_transform(3857)
st_crs(cholera_latlong)$proj4string[1] "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs"
st_crs(3857)$proj4string[1] "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs"
ggplot(cholera_latlong) +
annotation_map_tile(type = "osm", zoomin = 0) +
geom_sf(aes(size = Count),color="#0288D1", alpha = 0.7)+
theme_bw()Zoom: 17
Visualisasi Interaktif
cholera_latlong %>%
mapview::mapview(zcol = "Count")Data Spatial dengan geometri Poligon
Data
kab_indo <- st_read("C:\\Users\\User\\Documents\\Data\\Admin2Kabupaten\\idn_admbnda_adm2_bps_20200401.shp")Reading layer `idn_admbnda_adm2_bps_20200401' from data source
`C:\Users\User\Documents\Data\Admin2Kabupaten\idn_admbnda_adm2_bps_20200401.shp'
using driver `ESRI Shapefile'
Simple feature collection with 522 features and 14 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 95.01079 ymin: -11.00762 xmax: 141.0194 ymax: 6.07693
Geodetic CRS: WGS 84
jum_nakes <- read.csv("C:\\Users\\User\\Documents\\Data\\jml_tenaga_kesehatan_msyrkt__kabupatenkota.csv")
jum_nakes2021 <- jum_nakes %>%
filter(tahun==2021) %>%
select(nama_kabupaten_kota,jumlah_nakesmas)
jum_nakes2021 nama_kabupaten_kota jumlah_nakesmas
1 KABUPATEN BOGOR 291
2 KABUPATEN SUKABUMI 74
3 KABUPATEN CIANJUR 66
4 KABUPATEN BANDUNG 135
5 KABUPATEN GARUT 134
6 KABUPATEN TASIKMALAYA 1
7 KABUPATEN CIAMIS 105
8 KABUPATEN KUNINGAN 86
9 KABUPATEN CIREBON 97
10 KABUPATEN MAJALENGKA 40
11 KABUPATEN SUMEDANG 86
12 KABUPATEN INDRAMAYU 102
13 KABUPATEN SUBANG 66
14 KABUPATEN PURWAKARTA 14
15 KABUPATEN KARAWANG 44
16 KABUPATEN BEKASI 77
17 KABUPATEN BANDUNG BARAT 50
18 KABUPATEN PANGANDARAN 47
19 KOTA BOGOR 70
20 KOTA SUKABUMI 29
21 KOTA BANDUNG 192
22 KOTA CIREBON 34
23 KOTA BEKASI 115
24 KOTA DEPOK 120
25 KOTA CIMAHI 45
26 KOTA TASIKMALAYA 58
27 KOTA BANJAR 39
Visualisasi Data Spatial
Visualisasi Statis
ggplot(data = kab_indo)+
geom_sf()+
theme_bw()#filter jabar
jabar_kabkot <- kab_indo %>%
filter(ADM1_EN=="Jawa Barat")
jabar_kabkotSimple feature collection with 28 features and 14 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 106.3703 ymin: -7.820979 xmax: 108.8469 ymax: -5.918148
Geodetic CRS: WGS 84
First 10 features:
Shape_Leng Shape_Area ADM2_EN ADM2_PCODE ADM2_REF ADM2ALT1EN
1 3.093005 0.14360665 Bandung ID3204 <NA> <NA>
2 3.027563 0.10447586 Bandung Barat ID3217 <NA> <NA>
3 2.553369 0.10359739 Bekasi ID3216 <NA> <NA>
4 4.450342 0.24474031 Bogor ID3201 <NA> <NA>
5 3.130958 0.13047729 Ciamis ID3207 <NA> <NA>
6 4.741142 0.29407915 Cianjur ID3203 <NA> <NA>
7 2.752827 0.08738231 Cirebon ID3209 <NA> <NA>
8 3.477542 0.25300160 Garut ID3205 <NA> <NA>
9 3.148833 0.17028961 Indramayu ID3212 <NA> <NA>
10 2.898903 0.15641686 Karawang ID3215 <NA> <NA>
ADM2ALT2EN ADM1_EN ADM1_PCODE ADM0_EN ADM0_PCODE date validOn
1 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
2 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
3 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
4 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
5 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
6 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
7 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
8 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
9 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
10 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
validTo geometry
1 -001-11-30 MULTIPOLYGON (((107.7331 -6...
2 -001-11-30 MULTIPOLYGON (((107.4095 -6...
3 -001-11-30 MULTIPOLYGON (((107.0757 -5...
4 -001-11-30 MULTIPOLYGON (((106.9708 -6...
5 -001-11-30 MULTIPOLYGON (((108.36 -7.0...
6 -001-11-30 MULTIPOLYGON (((107.2302 -6...
7 -001-11-30 MULTIPOLYGON (((108.685 -6....
8 -001-11-30 MULTIPOLYGON (((107.9182 -6...
9 -001-11-30 MULTIPOLYGON (((108.2003 -6...
10 -001-11-30 MULTIPOLYGON (((107.1126 -5...
jabar_kabkot %>%
ggplot()+
geom_sf()+
ggsflabel::geom_sf_label_repel(aes(label=str_wrap(ADM2_EN,width = 1)),size=1.75)+
theme_bw()+
theme(axis.title = element_blank())Warning in st_point_on_surface.sfc(data$geometry): st_point_on_surface may not
give correct results for longitude/latitude data
kita juga bisa menambahkan peta “asli” dari OpenStreetMap dengan fungsi annotation_map_tile. Untuk itu, kita perlu memastikan bahwa proj4string dari data yang kita miliki sama dengan EPSG:3857
st_crs(3857)$proj4string[1] "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs"
st_crs(jabar_kabkot)$proj4string[1] "+proj=longlat +datum=WGS84 +no_defs"
jabar_kabkot_osm <- jabar_kabkot %>%
st_transform(3857)
st_crs(jabar_kabkot_osm)$proj4string[1] "+proj=merc +a=6378137 +b=6378137 +lat_ts=0 +lon_0=0 +x_0=0 +y_0=0 +k=1 +units=m +nadgrids=@null +wktext +no_defs"
jabar_kabkot_osm %>%
ggplot()+
annotation_map_tile(type = "osm", zoomin = 0)+
geom_sf()+
ggsflabel::geom_sf_label_repel(aes(label=str_wrap(ADM2_EN,width = 1)),size=1.75)+
theme_bw()Zoom: 9
jum_nakes2021fin <- jum_nakes2021 %>%
mutate(nama_kabupaten_kota= nama_kabupaten_kota %>%
#dibuang kata "KABUPATEN"
str_remove(pattern = "KABUPATEN ") %>%
#diubah menjadi huruf kapital setiap awal kata
str_to_title()
)
jum_nakes2021fin nama_kabupaten_kota jumlah_nakesmas
1 Bogor 291
2 Sukabumi 74
3 Cianjur 66
4 Bandung 135
5 Garut 134
6 Tasikmalaya 1
7 Ciamis 105
8 Kuningan 86
9 Cirebon 97
10 Majalengka 40
11 Sumedang 86
12 Indramayu 102
13 Subang 66
14 Purwakarta 14
15 Karawang 44
16 Bekasi 77
17 Bandung Barat 50
18 Pangandaran 47
19 Kota Bogor 70
20 Kota Sukabumi 29
21 Kota Bandung 192
22 Kota Cirebon 34
23 Kota Bekasi 115
24 Kota Depok 120
25 Kota Cimahi 45
26 Kota Tasikmalaya 58
27 Kota Banjar 39
jabar_nakes <- jabar_kabkot %>%
full_join(y = jum_nakes2021fin,
by = join_by(ADM2_EN==nama_kabupaten_kota))
jabar_nakesSimple feature collection with 28 features and 15 fields
Geometry type: MULTIPOLYGON
Dimension: XY
Bounding box: xmin: 106.3703 ymin: -7.820979 xmax: 108.8469 ymax: -5.918148
Geodetic CRS: WGS 84
First 10 features:
Shape_Leng Shape_Area ADM2_EN ADM2_PCODE ADM2_REF ADM2ALT1EN
1 3.093005 0.14360665 Bandung ID3204 <NA> <NA>
2 3.027563 0.10447586 Bandung Barat ID3217 <NA> <NA>
3 2.553369 0.10359739 Bekasi ID3216 <NA> <NA>
4 4.450342 0.24474031 Bogor ID3201 <NA> <NA>
5 3.130958 0.13047729 Ciamis ID3207 <NA> <NA>
6 4.741142 0.29407915 Cianjur ID3203 <NA> <NA>
7 2.752827 0.08738231 Cirebon ID3209 <NA> <NA>
8 3.477542 0.25300160 Garut ID3205 <NA> <NA>
9 3.148833 0.17028961 Indramayu ID3212 <NA> <NA>
10 2.898903 0.15641686 Karawang ID3215 <NA> <NA>
ADM2ALT2EN ADM1_EN ADM1_PCODE ADM0_EN ADM0_PCODE date validOn
1 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
2 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
3 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
4 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
5 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
6 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
7 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
8 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
9 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
10 <NA> Jawa Barat ID32 Indonesia ID 2019-12-20 2020-04-01
validTo jumlah_nakesmas geometry
1 -001-11-30 135 MULTIPOLYGON (((107.7331 -6...
2 -001-11-30 50 MULTIPOLYGON (((107.4095 -6...
3 -001-11-30 77 MULTIPOLYGON (((107.0757 -5...
4 -001-11-30 291 MULTIPOLYGON (((106.9708 -6...
5 -001-11-30 105 MULTIPOLYGON (((108.36 -7.0...
6 -001-11-30 66 MULTIPOLYGON (((107.2302 -6...
7 -001-11-30 97 MULTIPOLYGON (((108.685 -6....
8 -001-11-30 134 MULTIPOLYGON (((107.9182 -6...
9 -001-11-30 102 MULTIPOLYGON (((108.2003 -6...
10 -001-11-30 44 MULTIPOLYGON (((107.1126 -5...
p0 <- jabar_nakes %>%
ggplot()+
geom_sf(aes(fill=jumlah_nakesmas))+
ggsflabel::geom_sf_label_repel(aes(label=str_wrap(ADM2_EN,width = 1)),size=1.75)+
scale_fill_stepsn(colours = viridis::magma(n = 6,direction = -1),breaks=seq(0,300,50))+
annotation_north_arrow(location = "tl",which_north = "true",
pad_x = unit(0.2, "cm"), pad_y = unit(0.2, "cm"),
style = north_arrow_nautical,width = unit(1.5, "cm"),
height = unit(1.5, "cm"))+
theme_bw()+
theme(axis.title = element_blank())
p0Warning in st_point_on_surface.sfc(data$geometry): st_point_on_surface may not
give correct results for longitude/latitude data
Open streetmap
p1 <- jabar_nakes %>%
st_transform(3857) %>%
ggplot()+
annotation_map_tile(type = "osm", zoomin = 0)+
geom_sf(aes(fill=jumlah_nakesmas))+
ggsflabel::geom_sf_label_repel(aes(label=str_wrap(ADM2_EN,
width=1)
),size=1.75)+
scale_fill_stepsn(colours = viridis::magma(n = 6,
direction = -1),breaks=seq(0,300,50))+
annotation_north_arrow(location = "tl",which_north = "true",
pad_x = unit(0.2, "cm"),
pad_y = unit(0.2, "cm"),
style = north_arrow_nautical,width = unit(1.5, "cm"),
height = unit(1.5, "cm")) +
theme_bw()+
theme(axis.title = element_blank())
p1Zoom: 9
Visualisasi Interaktif
jabar_nakes %>%
mapview::mapview(zcol="jumlah_nakesmas",
at = seq(0,300,50),
col.regions=viridis::magma(n = 7,direction = -1))