Skip to contents

In this vignette, you will learn how to add new information to a map. Here, we retrieve a map of Manhattan, NYC.

First, we load the locations of crimes in Manhattan.

data("crime") 
data("soho_boundary")

Convert longitude / latitude into a sf

To add the crime locations in the dataset to our map, we harness the sf (simple features) package, which includes a lot of useful tools for working with geo data. To this end, we convert the dataset into a sf object using latitude and longitude.

crime |> head()

This can be achieved with the function sf::st_as_sf() using the coordinates from the dataset.

Setup the map parameters

We have to provide longitude, latitude and x_distance (i.e., the width of the map in meters). Furthermore, we define the extend of the OSM data in meters in get_osmdata(). y_distance is calculated automatically using the output size aspect ratio.

set_output_size("A4", orientation = "portrait")
osm <- get_osmdata(sf = soho_boundary)

Plot the map

plot_map() generates a ggplot2 object using the color theme set as parameter. That means that we can easily adjust the plot using ggplot2 commands and also add new information to the map.

p <- osm |> 
  crop(soho_boundary) |> 
  plot_map(palette = "alphabet") +
  theme_infomap_barlow() + 
  
  # Add geom with crimes
  geom_point(data = crime,
             aes(x = longitude, y = latitude, shape = type), color="#A72424", size=2) + 
  
  # Set labels
  labs(title = "CRIME IN SOHO",
       shape = "TYPE")

Now we can plot the map by simply calling its print method implicity:

p

Save map

save_map() can be used to store the print-ready plot object to the disk as a drawn object in pdf format.

save_map(plot = p, filename = "ny_crime.pdf")