[This article was first published on, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

A photo of Piedra de Culimacare on the Rio Casiquiare

Piedra de Culimacare on the Rio Casiquiare – CC-BY-NC-ND by Carsten ten Brink

Day 12 of 30DayMapChallenge: « South America » (previously).

Do you know you can circumnavigate the Guiana shield? There is a river, the Rio Casiquiare, that connects the Orinoco and the Amazon basin! If you need a map for your next adventure, in the “footsteps” of Alexander von Humboldt, here it is…

We pick the OpenStreetMap ID of the river relations (e.g.:, make a data.frame of the rivers geometry and plot it.


countries <- ne_countries(scale = 50, returnclass = "sf") 

rivers <- tribble(~name,            ~relation,
                  "Rio Casiquiare", 275909,
                  "Orinoco",        1083284,
                  "Rio Negro",      275660,
                  "Rio Amazonas",   2295651) |> 
  mutate(geometry = map(relation, \(r) paste0("relation/", r) |> 
                                     opq_osm_id() |> 
                                     opq_string () |> 
                                     osmdata_sf () |> 
                                     pluck("osm_lines", "geometry") |> 
                                     st_union() |> 
                                     st_geometrycollection())) |>
  st_sf(crs = "EPSG:4326")
ggplot() +
  geom_sf(data = countries, color = "gray80", fill = "gray95") +
  geom_sf(data = rivers, aes(color = name), linewidth = .8, key_glyph = "smooth") + 
  geom_text_repel(data = countries |>
                    filter(adm0_a3 %in% c("BRA", "GUY", "VEN", "SUR", "COL", "PER")), 
                  aes(label = name, geometry = geometry), 
                  stat = "sf_coordinates", size = 2.5) +
  scale_color_manual(name = "river",
                     values = c("Rio Casiquiare" = "firebrick3",
                                "Orinoco"        = "cyan4",
                                "Rio Negro"      = "gray10",
                                "Rio Amazonas"   = "burlywood2")) +
  coord_sf(xlim = c(-81, -36), ylim = c(-20, 12)) +
  labs(title = "Circumnavigating the Guiana shield",
       caption = "Approximate scale\nData: Openstreetmap contributors\nBasemap: Natural Earth\n",
       x = "",
       y = "") +
  annotation_scale(height = unit(1, "mm")) +
  theme(panel.background = element_rect(fill = "azure"),
        panel.grid = element_line(color = "azure2"),
        legend.key = element_rect(fill = NA),
        plot.caption = element_text(size = 6))

To leave a comment for the author, please follow the link and comment on their blog: offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)