← Where New York livesMethodology

How the map was made

Twelve censuses of tract counts, spread over the city’s land, smoothed and drawn as ground that rises with density.

What the map shows

For each decennial census from 1910 to 2020, the number of people living per square mile around every point in New York City, averaged over roughly an eighth of a mile. The ground is raised and colored by that density. The colors follow the legend exactly, and thin dark contour lines mark 25,000, 50,000, 100,000, 200,000 and 400,000 people per square mile. The height also rises with density, compressed slightly at the top (height is proportional to density to the 0.85 power) so the 1910 Lower East Side does not hide everything else. Light comes from the northwest and casts shadows to the southeast. The map can be tipped and turned to see the heights from the side; the vertical scale is exaggerated for reading, not drawn to any real distance.

Between census years the map blends the two neighboring censuses in a straight line. The year counter moves through those in-between years, but only the census years are data.

Sources

All population counts are the Census Bureau’s own tract tables, as compiled by IPUMS NHGIS at the University of Minnesota. New York City was one of eight cities the bureau divided into census tracts in 1910, which is why the map starts there. NHGIS also supplies the tract boundaries for 1910 through 2000. For 2010 and 2020 the boundaries are the Census Bureau’s cartographic boundary files. The city’s land, used to keep people out of the rivers and the harbor, is the Department of City Planning’s borough boundaries clipped to the shoreline (NYC Open Data gthc-hcne).

Citation: Jonathan Schroeder, David Van Riper, Steven Manson, Grace Cooper, Zachary Krause, Tracy Kugler, Tsu Zhu and Steven Ruggles. IPUMS National Historical Geographic Information System: Version 21.0 [dataset]. Minneapolis, MN: IPUMS. 2026. doi.org/10.18128/D050.V21.0. NHGIS’s terms do not allow redistributing its tables, so this project publishes only the smoothed density grids derived from them. The scripts below fetch the original tables from NHGIS.

Each census, checked against the official total

“Tract sum” is the number of people the map places on the grid. “Not placed” counts people in tract records that have no boundary in any nearby census; they are left off the map.

CensusNHGIS datasetTableBoundaries usedTracts with peopleTract sumOfficial city totalDifferenceNot placed
19101910_tPop_NYCNT5, Sex by Race/Nativity (all cells summed)1910 tracts7024,766,8834,766,883+0.00%0
19201920_tPop_NYCNT1, Population, 1910 and 1920 (1920 column)1920 tracts1,3575,589,6555,620,048-0.54%20,590
19301930_tPop_NYCNT3, Sex by Race (all cells summed)1930 tracts3,0556,942,8346,930,446+0.18%542
19401940_tPH_NYCNT1, Total Population1930 tracts (see note)3,0687,450,7847,454,995-0.06%4,211
19501950_tPH_MajorNT1, Total Population1950 tracts2,3587,891,9547,891,957-0.00%0
19601960_tPHNTSUP2, Total Persons1960 tracts2,1557,783,3147,781,984+0.02%0
1970Time series D08 (nominal tracts)Persons under 18 plus persons 18 and over1970 tracts2,1517,892,4897,894,862-0.03%2,360
1980Time series D08 (nominal tracts)Persons under 18 plus persons 18 and over1980 tracts2,1607,070,5297,071,639-0.02%1,000
1990Time series D08 (nominal tracts)Persons under 18 plus persons 18 and over1990 tracts2,1927,322,3017,322,564-0.00%263
2000Time series D08 (nominal tracts)Persons under 18 plus persons 18 and over2000 tracts2,1938,008,2788,008,278+0.00%0
2010Time series D08 (nominal tracts)Persons under 18 plus persons 18 and over2010 tracts (Census cartographic file)2,1408,175,1338,175,133+0.00%0
2020Time series D08 (nominal tracts)Persons under 18 plus persons 18 and over2020 tracts (Census cartographic file)2,2928,804,1908,804,190+0.00%0

From tracts to a grid

  1. The city is covered by a grid of squares a twentieth of a mile (80.5 meters) on a side, 605 by 607 squares, in the UTM zone 18N projection. With that size, 20 by 20 squares make exactly one square mile.
  2. A square counts as land if its center falls inside today’s shoreline-clipped boroughs.
  3. Each tract’s people are spread evenly over the land squares whose centers fall inside the tract. No tract was too small to own at least one square.
  4. The grid is smoothed with a Gaussian kernel with a standard deviation of 2.5 squares (about 0.12 mile). The smoothing is divided by the share of land under the kernel, so people near the shore stay on the shore instead of draining into the water, and water squares are then set to zero.
  5. The result is converted to people per square mile and stored as 16-bit values on a square-root scale. The page decodes them and draws the map with WebGL.

The most crowded square mile, and Manhattan’s share

The most crowded square mile is the 20-by-20-square window, anywhere on the grid, that holds the most people before smoothing. Because people are spread evenly within each tract, it is an estimate. Its location is named by the 2020 Neighborhood Tabulation Area under its center. Manhattan’s share counts the people placed inside Manhattan’s borough boundary. Before 1914 the Bronx was part of New York County, so the boundary, not the county field in the census tables, decides which borough a 1910 tract belongs to. For 1970 through 2010 the placed borough totals were compared with the sums of the Department of City Planning’s community-district counts (xi7c-iiu2) and agree within 0.8 percent for every borough.

CensusPeople in the most crowded square mileCentered inCenter (lat., long.)Share in Manhattan
1910383,000Lower East Side40.7182, -73.985548.9%
1920290,000Lower East Side40.7211, -73.984540.6%
1930175,000East Village40.7218, -73.983626.9%
1940165,000East Harlem (South)40.7954, -73.943325.3%
1950169,000East Harlem (South)40.7954, -73.944324.8%
1960146,000Harlem (South)40.8056, -73.948021.8%
1970123,000Upper East Side-Yorkville40.7745, -73.953219.5%
1980124,000Upper East Side-Yorkville40.7745, -73.953220.2%
1990127,000Upper East Side-Yorkville40.7752, -73.953220.3%
2000131,000Upper East Side-Yorkville40.7759, -73.952219.2%
2010130,000Upper East Side-Yorkville40.7759, -73.952219.4%
2020139,000Upper East Side-Yorkville40.7759, -73.952219.2%

What to keep in mind

Rebuilding it

Scripts are in scripts/: fetch_nhgis_historic.py requests the 1910–1960 tables and boundaries from the NHGIS API (it needs a free IPUMS API key); the 1970–2020 time series and boundaries come from the same NHGIS sources. build_grids.py makes the grids, build_places.py adds labels and the neighborhood lookup, and build_methodology.py writes this page.

The idea comes from an animated density map of France, “Là où vit la France,” shared by Yan Holtz of the R Graph Gallery.