SD_P3

Package connect to sqlite

library(RSQLite)
library(DBI)
library(tidyverse)

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 dataframe

SQL 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_kabkot
Simple 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_nakes
Simple 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())
p0
Warning 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())
p1
Zoom: 9

Visualisasi Interaktif

jabar_nakes %>% 
  mapview::mapview(zcol="jumlah_nakesmas",
                   at = seq(0,300,50),
                   col.regions=viridis::magma(n = 7,direction = -1))