tassones
tassones

Reputation: 1692

How to make the Great Lakes the same color as the ocean in R?

I am new to using R to make maps. I am trying to make a map of North America (centered on the US) and would like the Great Lakes to be the same color as the ocean color. My current code defaults to having them the same color as the countries/states. Any ideas on how to change their color? Maybe a different base map?

Current code:

library(cowplot)
library(googleway)
library(ggplot2)
library(ggrepel)
library(ggspatial)
library(sf)
library(rnaturalearth)
library(rnaturalearthdata)

world <- ne_countries(scale = "medium", returnclass = "sf")
usa <- st_as_sf(maps::map("state", fill=TRUE, plot =FALSE),
                crs = 4269)

ggplot(data = world) +
  geom_sf(color = "black", fill = "gray") +
  geom_sf(data = usa, color = "black", fill = "gray") +
  xlab("Longitude") + ylab("Latitude") +
  coord_sf(xlim = c(-123, -69), ylim = c(25, 49), expand = TRUE) +
  annotation_scale(location = "br", width_hint = 0.5, text_cex = 1) +
  annotation_north_arrow(location = "br", which_north = "true", 
                         pad_x = unit(0.15, "in"), pad_y = unit(0.3, "in"),
                         style = north_arrow_fancy_orienteering) +
  theme_bw() +
  theme(plot.title = element_text(hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5),
        text = element_text(size = 16),
        axis.text.x = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"),
        panel.grid.major = element_line(color = gray(0.5), linetype = "dashed", size = 0.5),
        panel.background = element_rect(fill = "aliceblue"))

Upvotes: 2

Views: 1312

Answers (1)

Arthur Welle
Arthur Welle

Reputation: 698

Ok, I did some diggig, turns out that rnaturalearth have the geometries of the lakes of the whole world. ne_download(type = 'lakes').

library(ggplot2)
library(ggspatial)
library(sf)
library(rnaturalearth)

World as sf

world <- rnaturalearth::ne_countries(scale = "medium",
                                     returnclass = "sf")

North America as sf

n_america <- world %>% 
  filter(adm0_a3  %in% c("MEX", "CAN", "USA"))

Lakes as sf

lakes <- rnaturalearth::ne_download(scale = 110, 
                     type = 'lakes', 
                     category = 'physical') %>% 
      sf::st_as_sf(lakes110, crs = 4269)

US-States as sf

usa_states <- st_as_sf(maps::map("state", 
                                 fill=TRUE, 
                                 plot =FALSE),
                crs = 4269)

Or alternatively, USA states as sf (so you would´t need {maps})

devtools::install_github("ropensci/rnaturalearthhires")
usa_states <- rnaturalearth::ne_states(country = "United States of America") %>% 
 sf::st_as_sf(crs = 4269)

Plot with ggplot2

ggplot() +
  geom_sf(data = n_america,
          mapping = aes(geometry = geometry),
          color = "black",
          fill = "gray")  +
  geom_sf(data = usa_states,
          mapping = aes(geometry = geom),          
          color = "black", 
          fill = "gray") +
  geom_sf(data = lakes,
          mapping = aes(geometry = geometry),
        color = "black",
        fill = "lightblue")  +
  coord_sf(ylim = c(23, 49),
           xlim = c(-123, -69),
           expand = TRUE) +
  annotation_scale(location = "br", 
                   width_hint = 0.25, 
                   text_cex = 1) +
  annotation_north_arrow(location = "br", 
                         which_north = "true", 
                         pad_x = unit(0.15, "in"),
                         pad_y = unit(0.3, "in"),
                         style = north_arrow_fancy_orienteering) +
  labs(x = "Longitude",
       y = "Latitude") +  
  theme_bw() +
  theme(axis.text.x = element_text(size = 12, color = "black"),
        axis.text.y = element_text(size = 12, color = "black"),
        panel.grid.major = element_line(color = gray(0.5), linetype = "dashed", size = 0.5),
        panel.background = element_rect(fill = "lightblue"))

enter image description here

Change the color of the ocean and the lakes for whatever you want.

Upvotes: 4

Related Questions