All Posts

Telling the Story of Changing Populations With Mapping Historical New York: A Digital Atlas

Content in this post comes from our presentation at the North American Cartographic Information Society (NACIS) 2024 Annual Meeting last week in Tacoma, WA.

Mapping Historical New York: A Digital Atlas

Mapping Historical New York: A Digital Atlas visualizes New York City’s transformations during the late-nineteenth and early-twentieth centuries both in terms of population and landscape. Drawing on 1850, 1880, 1910, and 1940 Census data, MHNY shows how migration, residential, and occupational patterns shaped the city. Researchers and students use the tool as a storytelling platform to highlight specific places and times in the city’s development over the last 170+ years.

Stamen first collaborated with Columbia University’s Center for Spatial Research on the original version of MHNY in 2021 (you can hear more about that on our podcast Pollinate or read more on our blog). This week, we’re excited to relaunch the tool with updated cartography, functionality, interface improvements, and narrative stories. Let us walk you through some of the improvements we’ve made in the new, more dynamic Mapping Historical New York:

Befores and afters

Previous version of MHNY

Here we have the original version of MHNY. Then and now, we feel like this version is a successful series of visualizations that function well and tell interesting stories about NYC over the years. There are some great tools and features that we won’t touch on here that persist from the existing version to the relaunch – definitely take a few minutes to explore the tool yourself if you haven’t already.

Explicitly stating design goals early in a project helps us stay focused and prioritize

Our design goals for this redesign/update were simple:

  1. Utilize vector styling to allow users more flexibility when viewing data by individual
  2. Update the visual design of the map so the thematic data shines first and foremost, with support from the basemap
  3. Use a scalable approach that will work for more years and locations in the future

Before touching anything else on the map, we wanted to make some subtle changes to the basemap that will allow the thematic data to shine. Using a less saturated and more neutral color for the water helps avoid any competition between the basemap and colors in the data layers. We also wanted to utilize more of the underlying data in the basemap to improve visual data hierarchy. Styling the roads with the classes available in the data (primary vs. other) and including a casing (carto-speak for a thin outline) allows that data to add even more context to the map without being overpowering. 

before: gray-blue water competes somewhat with thematic color palette
after: lighter, more neutral basemap serves as a canvas for thematic data

Another small but mighty change was around labels. We gave more weight to place labels to provide both historical and modern context for the locations where people lived during this period. We updated the fonts to match the sans serif Aktiv Grotesk we use in the interface for a more seamless experience.

Primary roads like Broadway are now thicker and place labels are more prominent in the new version (right).

Dot density

Probably the biggest change to MHNY was the transition from a raster to vector version of what we call beeswarm dot density. The initial version of this tool used raster tiles to show predefined slices of the data that were curated by the subject matter experts at the Center for Spatial Research. This worked well, but there are some limitations to flexibility and interactivity when using raster tiles. That said, we knew vector styling would be a challenge with this data because of how many points need to be visible in a small area at the same time.

We think the dot density map is a really beautiful visualization at the city, borough and neighborhood levels. That said, there are definitely situations where it’d be nice to focus on one attribute at a time. By using vector tiles, this is now possible by hovering over that attribute in the legend.

Hovering over individual attributes in the legend highlights those attributes on the map

You can also select one attribute and change it in case your interests are different from the predefined options. This really unlocks a whole new world of possible maps you can view with the tool.

You get a completely different map when you change yellow to represent people from the United States (right) instead of people from England (left).

On the left you can see the old version, which some people are pretty attached to! Some of us at Stamen have called this the “fire drill view,” as if everyone in New York went outside at the same time during a citywide fire drill. The aim here was to make something like a beeswarm dot density map.

before (left) vs. after (right)

While nothing in the data changed between versions, dot density in raster vs. vector can look very different! Raster really weights some colors more heavily than others and has a bleeding effect where you end up with a blobbier look and feel. Vector rendering is much more precise and it’s easier to distinguish one dot from another.

In the new version, as was the case before, every dot represents one individual. Individuals are aggregated by building, visually represented as individual dots in concentric circles. Things are more orderly and size is a bit easier to see at this scale. By using vector rendering, there is considerably less overlap between individual circles.

Individuals are organized into concentric circles by building

The original colors were working hard to be visually distinguishable, but the balance between colors needed some work. Ideally, no color outweighs another and patterns within the data are easy to see at all scales. Using colors with similar saturations and lightness made a big difference. Here is our dot density color palette, before and after:

The new colors have more similar lightness and saturation values to one another, which makes them feel more equal on the map.

We also tested the new color palette for colorblind-friendliness and adjusted some of the color assignments for default values for better blending. For example, using red and yellow instead of pink and green to represent male and female data made it easier to see patterns. Areas with similar concentrations of both attributes appear orange instead of brown.

Gender across the population in the previous (left) and right (right) versions. Patterns are easier to see on the right, as the colors selected for these two attributes blend together nicely where there is overlap.

It was important to us to think about how to include people who are otherwise not currently on the map. There are dozens of birthplaces and occupation categories available in the data, but you can only view up to six at a time. In the previous version, you would only see an individual dot if the value was included in the legend. We opted not to show them as you’re zoomed out (as they would dominate the map in most cases), but to include “other” values as empty circles as you zoom in. With this small change, the zoomed-in view now paints a more complete picture of the data.

People not from one of the six birthplaces listed in the legend are now shown on the map as empty circles. Previously, you would only see the colorful circles on the map.

Aggregate views

When viewing the data by building, we moved from individual markers to proportional circles. Each circle represents a building that includes at least one person for the selected attribute (here, Italians). With proportional circles, the size corresponds to the number of Italians in that building. Now, we can see both the location and density of individuals for the selected attribute, which makes it much easier to understand population patterns across the city. Using a bright color helps make the data more legible, too!

Before (left) shows buildings with individuals from Italy, compared to after (right) with new styling including proportional sizing by person count per building.

For the aggregated view, we are still using a choropleth map, but have moved to a new color palette and added a no data/null pattern. There was no practical need for multiple colors on our spectrum. Our new monochromatic color palette feels easier to read and biases less to the higher values. Adding a pattern for null values helps us distinguish between null and zero, which was not possible in the previous version. This is always an important distinction to make, but especially so with historical data where gaps are more prevalent than modern data.

Before (left) it was not possible to distinguish between null and zero, as it is now (right).

Pop-ups + data visualization

We added a little visualization to the pop-ups to help make sense of the sometimes complex hierarchy of this data and provide a clearer snapshot of a building’s demographic breakdown with just a glance. Students at Columbia use these in their classes, usually copy/pasting them into reports, so we wanted to make sure that was still possible with this view.

Before (left) compared to after (right), where we are now using a simple bar visualization to see the breakdown of occupations within the building at 213 E Broadway.

Experiments

We like to share experiments as we work through data visualization problems at Stamen. We tried a lot of interesting approaches for the dot density map in particular that may lend some insight into how we ended up with the final design.

For our vectorized beeswarm dot density approach, we repurposed dwelling vector tiles that have counts by category instead of creating redundant vector tiles for both dwellings and individuals. We created a custom protocol in MapLibre GL JS to load vector tiles, split each dwelling into individual points arranged concentrically, and return the result as a new vector tile. Doing it this way means we can reorder the points dynamically, but we still get all the benefits of vector tiles (i.e., restyling dynamically based on user interactions). There is a performance impact when using vector tiles here, but considering the flexibility and new types of user interactions it opens up, it has been a worthwhile tradeoff.

Ordered within circles (left) vs. ordered within rectangles (middle) vs. random within rectangles (right) for the same large building in Manhattan

Our goal with this new vector approach was to show the millions of individuals in our dataset with less overlap than you see in the raster version. We tried several different options, including dots ordered in circles, dots ordered in rectangles, and dots placed randomly in rectangles. We used the circular arrangement concept on another project last year (Densho Manzanar), but with a much smaller dataset. We had a feeling that would be the best option but seeing all three next to each other had some interesting results:

Ordered within circles (left) vs. ordered within rectangles (middle) vs. random within rectangles (right)

The circles are nice and organized with minimal overlap amongst the points. The ordered rectangles have lots of overlap and create a smudged effect, but we could see potential here in terms of mimicking the Hull House maps. Using rectangles also somewhat implied the shape of a building, which is not information we actually have in our dataset. Dots randomly placed within rectangles were a bit hard to see. This approach also made it difficult to account for small buildings and large buildings simultaneously, plus the likelihood of overlapping points is high.

We had to account for differently-sized buildings, which could range from one to hundreds of people, in terms of the individual circle size and dwelling-level concentric circle size and spacing. We also thought about the best way to order attributes within the concentric circles and ended up with the “other” attribute always sitting on the outside.

Smaller buildings in Manhattan follow the same rules as large buildings like this facility on Ward’s Island

Looking forward

All of the changes discussed here were released in the relaunch of MHNY earlier this week! Now that the relaunch is available to the public, the team at Columbia is shifting focus to expansion. Census data from 1850 will be added to the tool in the near future. Data will also expand to include Queens, the Bronx, and Staten Island for some years. Look out for more updates on Mapping Historical New York in the coming months!

Preview of 1940 data for all 5 boroughs

vWorking with teams like the Center for Spatial Research on projects like MHNY is what we love to do at Stamen. If you or your team would like to discuss a collaboration, drop us a line.

About Stamen

Stamen is a globally recognized strategic design partner and one of the most established cartography and data visualization studios in the industry. For over two decades, Stamen has been helping industry giants, universities, and civic-minded organizations alike bring their ideas to life through designing and storytelling with data. We specialize in translating raw data into interactive visuals that inform, inspire and incite action. At the heart of this is our commitment to research and ensuring we understand the challenges we face. We embrace ambiguity, we thrive in data, and we exist to build tools that educate and inspire our audiences to act.