library(tmap)
tm_shape(World, 
         bbox = "FULL",
         crs = "+proj=ortho +lat_0=30 +lon_0=0") +
  tm_polygons() +
  tm_xlab("Longitudes") +
  tm_ylab("Latitudes")+ 
  tm_graticules(n.x = 20, n.y = 10, col = "black", lwd = 2, labels.show = FALSE) 

tm_shape(World, 
         bbox = "FULL",
         crs = "+proj=ortho +lat_0=30 +lon_0=0") +
  tm_polygons() +
  tm_xlab("Longitudes") +
  tm_ylab("Latitudes")+ 
  tm_graticules(n.x = 20, n.y = 10, col = "black", lwd = 2, labels.show = FALSE)+
  tm_style("natural")

tm_shape(World)+ 
  tm_polygons(
    fill = "#BF3EFF", # fill color
    col = "black",    # line color
    lwd = 0.5,        # line width
    lty = "dashed")   # line type

tm_shape(World)+ 
  tm_polygons(fill = "grey90") +   # constant fill color 
  tm_symbols(size = "pop_est",     # data variable, mapped to symbol size
             fill = "well_being",  # data variable, mapped to symbol fill color
             shape = "income_grp") # data variable, mapped to symbol shape

tm_shape(World)+
tm_polygons(fill = "HPI")

tm_shape(World)+ tm_polygons(
  fill = "HPI",
  fill.scale = tm_scale_intervals(
    style = "fisher",      # a method to specify the classes
    n = 7,                 # number of classes
    midpoint = 38,         # data value mapped to the middle palette color
    values = "pu_gn_div"   # color palette; 
                           # run cols4all::c4a_gui() to explore color palettes
  ))

tm_shape(World) +
  tm_polygons(
    fill = "HPI",
    fill.scale = tm_scale_intervals(
      breaks = c(0, 10, 20, 30, 40, 50, 60),
      values = "pu_gn_div",
      labels = c("0–10", "10–20", "20–30", "30–40", "40–50", "50–60")
    )
  )

tm_shape(World)+ 
  tm_polygons(
    fill = "HPI",
    fill.scale = tm_scale_continuous(
      limits = c(10, 60),
      values = "scico.hawaii"))

## ℹ tmap mode set to "plot".
## ℹ switch back to "view" mode with `tmap::ttm()`
## [plot mode] fit legend/component: Some legend items or map compoments do not
## fit well, and are therefore rescaled.
## ℹ Set the tmap option `component.autoscale = FALSE` to disable rescaling.
tm_shape(World) + 
  tm_polygons(
    fill = "economy",
    fill.scale = tm_scale_categorical())

tm_shape(metro) +
  tm_bubbles(size = "pop2020") +
  tm_basemap("OpenTopoMap")

tm_shape(World) + 
  tm_polygons(
    fill = "economy",
    fill.chart = tm_chart_bar())

tm_shape(World, crs = "+proj=eqearth") + 
  tm_polygons(
    fill = "HPI") +
  tm_layout(bg.color = "skyblue",
            earth_boundary = TRUE,
            frame = FALSE,
            space.color = "white")

tm_shape(World, crs = "+proj=eqearth") + 
  tm_polygons(
    fill = "HPI") +
  tm_layout(bg.color = "skyblue",
            earth_boundary = TRUE,
            frame = FALSE,
            space.color = "white")

## Linking to GEOS 3.13.1, GDAL 3.11.0, PROJ 9.6.0; sf_use_s2() is FALSE
tm_shape(World, 
         bbox = "FULL",
         crs = "+proj=ortho +lat_0=30 +lon_0=0") +
  tm_polygons() +
  tm_xlab("Longitudes") +
  tm_ylab("Latitudes")

LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7cn0NCmxpYnJhcnkodG1hcCkNCnRtX3NoYXBlKFdvcmxkLCANCiAgICAgICAgIGJib3ggPSAiRlVMTCIsDQogICAgICAgICBjcnMgPSAiK3Byb2o9b3J0aG8gK2xhdF8wPTMwICtsb25fMD0wIikgKw0KICB0bV9wb2x5Z29ucygpICsNCiAgdG1feGxhYigiTG9uZ2l0dWRlcyIpICsNCiAgdG1feWxhYigiTGF0aXR1ZGVzIikrIA0KICB0bV9ncmF0aWN1bGVzKG4ueCA9IDIwLCBuLnkgPSAxMCwgY29sID0gImJsYWNrIiwgbHdkID0gMiwgbGFiZWxzLnNob3cgPSBGQUxTRSkgDQpgYGANCg0KDQpgYGB7cn0NCnRtX3NoYXBlKFdvcmxkLCANCiAgICAgICAgIGJib3ggPSAiRlVMTCIsDQogICAgICAgICBjcnMgPSAiK3Byb2o9b3J0aG8gK2xhdF8wPTMwICtsb25fMD0wIikgKw0KICB0bV9wb2x5Z29ucygpICsNCiAgdG1feGxhYigiTG9uZ2l0dWRlcyIpICsNCiAgdG1feWxhYigiTGF0aXR1ZGVzIikrIA0KICB0bV9ncmF0aWN1bGVzKG4ueCA9IDIwLCBuLnkgPSAxMCwgY29sID0gImJsYWNrIiwgbHdkID0gMiwgbGFiZWxzLnNob3cgPSBGQUxTRSkrDQogIHRtX3N0eWxlKCJuYXR1cmFsIikNCg0KYGBgDQoNCg0KYGBge3J9DQp0bV9zaGFwZShXb3JsZCkrIA0KICB0bV9wb2x5Z29ucygNCiAgICBmaWxsID0gIiNCRjNFRkYiLCAjIGZpbGwgY29sb3INCiAgICBjb2wgPSAiYmxhY2siLCAgICAjIGxpbmUgY29sb3INCiAgICBsd2QgPSAwLjUsICAgICAgICAjIGxpbmUgd2lkdGgNCiAgICBsdHkgPSAiZGFzaGVkIikgICAjIGxpbmUgdHlwZQ0KYGBgDQoNCmBgYHtyfQ0KdG1fc2hhcGUoV29ybGQpKyANCiAgdG1fcG9seWdvbnMoZmlsbCA9ICJncmV5OTAiKSArICAgIyBjb25zdGFudCBmaWxsIGNvbG9yIA0KICB0bV9zeW1ib2xzKHNpemUgPSAicG9wX2VzdCIsICAgICAjIGRhdGEgdmFyaWFibGUsIG1hcHBlZCB0byBzeW1ib2wgc2l6ZQ0KICAgICAgICAgICAgIGZpbGwgPSAid2VsbF9iZWluZyIsICAjIGRhdGEgdmFyaWFibGUsIG1hcHBlZCB0byBzeW1ib2wgZmlsbCBjb2xvcg0KICAgICAgICAgICAgIHNoYXBlID0gImluY29tZV9ncnAiKSAjIGRhdGEgdmFyaWFibGUsIG1hcHBlZCB0byBzeW1ib2wgc2hhcGUNCg0KYGBgDQoNCmBgYHtyfQ0KdG1fc2hhcGUoV29ybGQpKw0KdG1fcG9seWdvbnMoZmlsbCA9ICJIUEkiKQ0KYGBgDQoNCmBgYHtyfQ0KdG1fc2hhcGUoV29ybGQpKyB0bV9wb2x5Z29ucygNCiAgZmlsbCA9ICJIUEkiLA0KICBmaWxsLnNjYWxlID0gdG1fc2NhbGVfaW50ZXJ2YWxzKA0KICAgIHN0eWxlID0gImZpc2hlciIsICAgICAgIyBhIG1ldGhvZCB0byBzcGVjaWZ5IHRoZSBjbGFzc2VzDQogICAgbiA9IDcsICAgICAgICAgICAgICAgICAjIG51bWJlciBvZiBjbGFzc2VzDQogICAgbWlkcG9pbnQgPSAzOCwgICAgICAgICAjIGRhdGEgdmFsdWUgbWFwcGVkIHRvIHRoZSBtaWRkbGUgcGFsZXR0ZSBjb2xvcg0KICAgIHZhbHVlcyA9ICJwdV9nbl9kaXYiICAgIyBjb2xvciBwYWxldHRlOyANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICMgcnVuIGNvbHM0YWxsOjpjNGFfZ3VpKCkgdG8gZXhwbG9yZSBjb2xvciBwYWxldHRlcw0KICApKQ0KDQpgYGANCg0KDQpgYGB7cn0NCnRtX3NoYXBlKFdvcmxkKSArDQogIHRtX3BvbHlnb25zKA0KICAgIGZpbGwgPSAiSFBJIiwNCiAgICBmaWxsLnNjYWxlID0gdG1fc2NhbGVfaW50ZXJ2YWxzKA0KICAgICAgYnJlYWtzID0gYygwLCAxMCwgMjAsIDMwLCA0MCwgNTAsIDYwKSwNCiAgICAgIHZhbHVlcyA9ICJwdV9nbl9kaXYiLA0KICAgICAgbGFiZWxzID0gYygiMOKAkzEwIiwgIjEw4oCTMjAiLCAiMjDigJMzMCIsICIzMOKAkzQwIiwgIjQw4oCTNTAiLCAiNTDigJM2MCIpDQogICAgKQ0KICApDQpgYGANCg0KYGBge3J9DQp0bV9zaGFwZShXb3JsZCkrIA0KICB0bV9wb2x5Z29ucygNCiAgICBmaWxsID0gIkhQSSIsDQogICAgZmlsbC5zY2FsZSA9IHRtX3NjYWxlX2NvbnRpbnVvdXMoDQogICAgICBsaW1pdHMgPSBjKDEwLCA2MCksDQogICAgICB2YWx1ZXMgPSAic2NpY28uaGF3YWlpIikpDQpgYGANCg0KYGBge3J9DQojIyDihLkgdG1hcCBtb2RlIHNldCB0byAicGxvdCIuDQojIyDihLkgc3dpdGNoIGJhY2sgdG8gInZpZXciIG1vZGUgd2l0aCBgdG1hcDo6dHRtKClgDQojIyBbcGxvdCBtb2RlXSBmaXQgbGVnZW5kL2NvbXBvbmVudDogU29tZSBsZWdlbmQgaXRlbXMgb3IgbWFwIGNvbXBvbWVudHMgZG8gbm90DQojIyBmaXQgd2VsbCwgYW5kIGFyZSB0aGVyZWZvcmUgcmVzY2FsZWQuDQojIyDihLkgU2V0IHRoZSB0bWFwIG9wdGlvbiBgY29tcG9uZW50LmF1dG9zY2FsZSA9IEZBTFNFYCB0byBkaXNhYmxlIHJlc2NhbGluZy4NCmBgYA0KDQpgYGB7cn0NCnRtX3NoYXBlKFdvcmxkKSArIA0KICB0bV9wb2x5Z29ucygNCiAgICBmaWxsID0gImVjb25vbXkiLA0KICAgIGZpbGwuc2NhbGUgPSB0bV9zY2FsZV9jYXRlZ29yaWNhbCgpKQ0KYGBgDQoNCg0KYGBge3J9DQp0bV9zaGFwZShtZXRybykgKw0KICB0bV9idWJibGVzKHNpemUgPSAicG9wMjAyMCIpICsNCiAgdG1fYmFzZW1hcCgiT3BlblRvcG9NYXAiKQ0KYGBgDQoNCg0KYGBge3J9DQp0bV9zaGFwZShXb3JsZCkgKyANCiAgdG1fcG9seWdvbnMoDQogICAgZmlsbCA9ICJlY29ub215IiwNCiAgICBmaWxsLmNoYXJ0ID0gdG1fY2hhcnRfYmFyKCkpDQpgYGANCmBgYHtyfQ0KdG1fc2hhcGUoV29ybGQsIGNycyA9ICIrcHJvaj1lcWVhcnRoIikgKyANCiAgdG1fcG9seWdvbnMoDQogICAgZmlsbCA9ICJIUEkiKSArDQogIHRtX2xheW91dChiZy5jb2xvciA9ICJza3libHVlIiwNCiAgICAgICAgICAgIGVhcnRoX2JvdW5kYXJ5ID0gVFJVRSwNCiAgICAgICAgICAgIGZyYW1lID0gRkFMU0UsDQogICAgICAgICAgICBzcGFjZS5jb2xvciA9ICJ3aGl0ZSIpDQpgYGANCg0KYGBge3J9DQp0bV9zaGFwZShXb3JsZCwgY3JzID0gIitwcm9qPWVxZWFydGgiKSArIA0KICB0bV9wb2x5Z29ucygNCiAgICBmaWxsID0gIkhQSSIpICsNCiAgdG1fbGF5b3V0KGJnLmNvbG9yID0gInNreWJsdWUiLA0KICAgICAgICAgICAgZWFydGhfYm91bmRhcnkgPSBUUlVFLA0KICAgICAgICAgICAgZnJhbWUgPSBGQUxTRSwNCiAgICAgICAgICAgIHNwYWNlLmNvbG9yID0gIndoaXRlIikNCiMjIExpbmtpbmcgdG8gR0VPUyAzLjEzLjEsIEdEQUwgMy4xMS4wLCBQUk9KIDkuNi4wOyBzZl91c2VfczIoKSBpcyBGQUxTRQ0KDQpgYGANCmBgYHtyfQ0KdG1fc2hhcGUoV29ybGQsIA0KICAgICAgICAgYmJveCA9ICJGVUxMIiwNCiAgICAgICAgIGNycyA9ICIrcHJvaj1vcnRobyArbGF0XzA9MzAgK2xvbl8wPTAiKSArDQogIHRtX3BvbHlnb25zKCkgKw0KICB0bV94bGFiKCJMb25naXR1ZGVzIikgKw0KICB0bV95bGFiKCJMYXRpdHVkZXMiKQ0KYGBgDQoNCg==