Mapping Immigrant America is a project I am working on for my upcoming talk September 19 at Dallas’s Old Red Museum, “Visualizing the Changing Landscape of US Immigration.” The map is a dot-density representation of the US immigrant population, with dots colored by immigrants’ general region of origin. The regions include:

Demographic data are from the 2009-2013 American Community Survey at the Census tract level; both geographic and demographic Census data come from the National Historical Geographic Information System1. I use ACS table B05006, “Place of Birth for the Foreign-Born Population in the United States.” Each dot represents approximately 20 immigrants in that Census tract from a given region, and the dots are placed randomly within Census tracts. The project was inspired by other interactive dot map implementations including The Racial Dot Map at the University of Virginia; Ken Schwenke’s Where the renters are; and Robert Manduca’s Where Are The Jobs?.

Feel free to explore! Also, I welcome comments and feedback; I’m available on the web and on Twitter. A few additional points about the map are below.

How was the map made?

Making this map took a lot of experimentation, and in turn a number of tools. I processed the data with a combination of R, QGIS, ArcGIS, and Python; the map itself was designed in Mapbox Studio, and built with Mapbox.js and Bootstrap. I also use Chris Whong’s really cool Legend Buddy to make the legend.

Why not one dot for every immigrant?

The Racial Dot Map, for example, uses data from the decennial Census, which attempts to be a complete count of the US population. In contrast, the American Community Survey is based on a sample of 3 million households annually, and then averaged over 5 years to obtain estimates for small areas like Census tracts. However, this makes small-area estimates subject to a margin of error, which in some cases can be substantial for small groups. I highly recommend this paper by Seth Spielman and David Folch to learn more about the implications of error in the ACS.

As such, I stress that the map represents the ACS estimates of immigrant geography in the US subject to a margin of error, and in turn not where all immigrants are. Having dots represent 20 immigrants mitigates the error somewhat as small counts are suppressed, but the estimates themselves are still error-prone and the effectiveness of this will be uneven from place to place. Additionally, there are both stylistic and architectural reasons for making this decision. Given the large number of colors I am representing on the map (nine), too many dots would make the map difficult to read at small scales, and cannot be packed into the vector tiles produced by Mapbox Studio. There are tools to address this, like Eric Fischer’s tippecanoe; however, I was unable to get it to work on Windows.

Why can’t I zoom out or zoom in more?

I chose to fix the zoom range between 7 and 13. The size and opacity of dots increase at larger scales to make them more visible. Zoom level 13 is sufficient to view individual dots, even in New York City (with a couple neighborhood exceptions), and zoom level 7 is the minimum I wanted to go to preserve visual clarity (even though in large cities, it still gets jumbled!). If you don’t see the name of your city at small scales, zoom in all the way, and most cities should show up; I had to omit some to prevent overlapping labels as much as I could. I plan to add some more features to make the map more navigable, like a geocoder for place search; I’m working through some CSS issues with that at the moment.


  1. Minnesota Population Center. National Historical Geographic Information System: Version 2.0. Minneapolis, MN: University of Minnesota 2011.