Lab: Firefly Mapping

With credit and thanks to John Nelson for his posts on the topic.

Firefly maps, in the words of John Nelson, “tricks normal people into realizing how much they like maps”.  They’re an eye-catching way to represent point data (and sometimes other kinds, but we’ll focus on points here).

For inspiration and general techniques, please see John Nelson’s overview.

A bit of Googling will find a Firefly starter pack for Pro, but the basemap it provides is a cantankerous thing that breaks often in our lab setting, so you’ll find instructions below to make your own.  You will want to download the premade Firefly style, however. To bring the premade images into Pro, use Picture marker as your symbol type and browse to where you unzipped them.

The data for this lab should be a point feature that coalesces in some areas and has a lot of dots. Population-based data is great for this, but there are plenty of other datasets out there that will have similar effects. Suggestions include Starbucks locations, Lord of the Rings filming locations, weather stations, farmers’ markets, Bigfoot sightings, etc. Choose something of interest to you and try it out – the main point is that the dots need to be clustered in some way, to maximize the impact of the glow (see John’s examples).  Some good data sources are POI Factory and GPS Data Team.

The dot size should be relatively small – the firefly effect will enlarge it, and the purpose is not to see individual dots so much as the overall pattern. Also, too large and the dots will get pixelated.

Preparing the Basemap

This is just a starting point – feel free to tinker with the settings once you have it all set up.  The idea is to have a subtle background for your fireflies, with just a hint of figure/ground help.

Note: If you’re not one of my current students, check out Hacking the Firefly Basemap instead, and skip to the next section.

  1. Grab the data from the Google Drive (  Unzip into your Originals folder, as usual.
  2. Set your data frame background to Black (Properties > General), and your coordinate system to something for the US that preserves area.
  3. Add USeast.tif and USwest.tif to your map.
    1. Group these two layers (select both, right click > Group) and rename the group to Color.
    1. Set the group to 80% transparent.
  4. Copy the Color group, paste, and rename as BW. 
    1. Move it to the bottom, and set it to 30% transparent.
    1. Symbolize each layer in the BW group as Stretch, and use the default grayscale ramp that comes up.
  5. Add LatLongOceans to your map.
    1. Symbolize as Unique Values, using the field DEGREE5.  Remove all values, then add back in just the Y value.
    1. Symbolize in bright blue, 0.5 pt and 80% transparent
  6. Copy LatLongOceans and paste as LatLongOceansGlow.
    1. Move LatLongOceansGlow underneath LatLongOceans.
    1. Adjust to 5pt and 95% transparent
  7. Add the Coast layer to your map.
    1. Set the color to No color and the outline to Sahara Sand, 0.5 pt, 75% transparent.
  8. Copy/paste as CoastGlow and move underneath Coast.
    1. Adjust to 3pt and 95% transparent

You should now have a snazzy but low-key basemap for your point data. 

Pro Tip: You’ll need to repeat setting the data frame background to black in your Layout also, or your map will look washed out.

Working with XY Data

Remember that most latitude and longitude values collected via GPS or from an internet map service are in the geographic spatial reference system WGS 1984. When adding the data to ArcMap/Pro, the software reads the decimal degrees but has no context for which spatial reference system to use, so it will always assume it should be the same as your data frame. You’ll need to specify WGS 1984 when you use the tool.

  1. Bring the file into your map, right click and Display XY Data, and make sure to specify the coordinate system (don’t trust the default, even if it looks right!). Click Run when done.
  2. Recall that the Events file created is a temporary layer, so export it as a shapefile to your working folder. Specify the data frame as the coordinate system, or use the Project tool to set the correct coordinate system after export.
  3. Remove the .csv and events layers from your map, and the old version if you reprojected.

Making Fireflies

  1. Download the firefly style from John’s blog into your Originals folder
  2. In Catalog, right click on the Firefly style (looks like a painter’s palette) and select Add Style
  3. Click your point symbol, and you should see the fireflies in the Gallery

What to Turn In

A Firefly map, 8 ½ x 11, printed in color for critique and submitted as a PDF to Canvas.


Lab: Choroplethora

The goal of this activity is twofold: to explore how classification methods can change the way we view the data, and to add a little color to set a mood for the maps.

Getting the data

Select a state with at least 30 counties. Retrieve data from NHGIS for your chosen state (at the county level) – you’ll need to choose a shapefile and a data table. Join the data table to your counties shapefile and choose a variable to map (i.e. median income, education level, etc.). Make sure you have data for the majority of your counties – some products, like the ACS (American Community Survey) are not 100% tabulation, and recent years may only have data for a few counties for certain variables.  The data visualization tool at the US Census can help you determine this before you spend a lot of time downloading and joining data – zoom in and select your state, set your variables at the top,  and wait for it to load.

Classifying the data

Set up four data frames, each with the exact same data. All maps should be at the same scale and same extent, using the Small Multiples technique we learned earlier.

For each map, you will choose a different classification scheme of the same variable: equal interval, quantiles, natural breaks and standard deviation. Choose color schemes that set a mood: they work well for the variable chosen, or lead the audience to a deliberate conclusion. Colors don’t need to be identical on all maps, but should be compatible, to build an overall theme.

Normalizing your data

Most of you will be working with data that needs to be normalized, i.e. represented as a percent of total.  If you don’t normalize, you’ll essentially end up with a population map, which tells us nothing about the actual data distribution.  Here’s a quick overview of why.  To do this in ArcGIS Pro or Desktop, use the Normalization field in the symbology settings.

Want to do COVID-19 data?  

  1.  Go to the Esri Disaster Response Hub
  2. Click Download (cloud icon with arrow) and select CSV (Shapefile is points, which won’t work for this lab)
  3. Open the csv and save as an Excel file (.xlsx) as your chosen state name (e.g. Ohio.xlsx)
  4. Sort by Province_State (should be column D), and then delete all the rows that aren’t your state.
  5. Save and close, then proceed to join the tables and make your maps.

Tips for Success

  • Think carefully about your classification choices – the number of classes and the way in which they are represented can impact readability
  • Darker = more is a pretty iron-clad cartographic convention, so think twice before you violate this.
  • Consider whether your data needs to be normalized – the answer is likely yes.
  • Be aware of color acuity issues when choosing your ramps.  ColorBrewer is a great place to find colorblind safe ramps and experiment with how they’ll look.
  • Small multiples is about comparing similarities and differences between maps, so keep as many things the same as possible.

Lab: Color and Mood, with Proportional Symbols

One of two projects with statistical techniques, this one involves using proportional or graduated symbols to represent data.  This method is especially useful to avoid the pitfalls of choropleth mapping, particularly when your mapping units are all different sizes.

For this map, we’ll be looking at refugee populations, either by country of origin or country of destination.  Mapping this for the whole world is challenging, so I encourage you to choose a region, such as the eastern Mediterranean, or sub-Saharan Africa.  You may want to look at the data before deciding.

Getting the Data

You’ll need to download countries from Natural Earth and the refugee data from the World Bank.  For the refugee data, this link takes you to data by country of origin, but you can switch to country of asylum in the panel to the right of the graph.  You may use either, but be sure you know which one you selected!  Download the data as an Excel file.

Data Preparation

  1. Add the countries to your map.
    1. Dissolve on SOV_A3, so that we have one record for each country, instead of one for each tiny island of a country.
    2. Keep the dissolved version, and remove the other one from your map.
  2. Open the Excel file and examine the data. You should have two tabs of metadata and one of data.  On the Data tab, we need to format it so ArcMap can read it.
    1. Locate the header row (has labels that identify each column).
    2. Delete every row above the header row so that the header row is now row 1.
    3. Save As to save the file with a meaningful name in your Working folder.
    4. Add the new file to your map. Note that Excel files can’t simply be dragged & dropped – use the Add Data button for best results.
  3. Join the Excel table to the shapefile. Explore both the shapefile and the Excel table to know which fields to base your join on. You may find it useful to uncheck Keep All Target Features in this case, as we only want to see countries with data.
    1. After you join, make sure to export to a new shapefile to make the join permanent.
    2. Go back and remove the join from the original layer so you can use it as a basemap.

Just symbolizing the data as proportional/graduated symbols at this stage will place the symbol, whatever it is, at the center of a particular country (and also do strange things to the polygons). To better control the symbols and their locations, we’ll use a tool to create points from the countries.

  1. Feature to Point tool: Use your dissolved countries layer as the input feature and leave all other options as the defaults. This will produce a point feature with the same attribute information as the polygon.

When you set up your map, your selected region should (obviously) be at the center, but this leaves us with a problem: Some large countries may automatically have their symbols placed out of view once you zoom in. Instead of expanding your view extent, just move the points to the part of the country that is visible (First, make sure to create a bookmark so you can quickly return to your current view extent):

  1. Edit the points (as needed): Switch to the Edit ribbon and use the Select tool to select a point you want to move. Zoom out until you can see all the center points. Click on the points you will need to move and move them to where you will be able to see them at your bookmarked view extent.  (Don’t forget to turn off selectability on the other layers!) Use the Move tool to move a feature, then click the green checkmark when you’re done moving it.  Save your edits.  You can do as many iterations of this process as you need to get the points in the correct locations.

Pro Tip: You may not know what region you want until after you symbolize the points.  Editing can be hard on large circles, because you need to find the exact center.  Set the points back to single symbol and they will be much easier to move.

Symbolizing the data

Once your points are ready, use proportional or graduated symbols to map a particular year’s refugee count. Consider the differences between the two methods and decide which better represents your message.  Make sure the legend is displaying the appropriate units. Do you think you should apply Flannery’s compensation? Ask yourself these questions, and experiment before you make your final, educated decision.

Choose a size range for your symbols that gives you some cohesion in dense areas, but doesn’t totally obscure everything.  Remember that proportional symbols have a size for each value, while graduated symbols use classes, just like a choropleth.  Decide which best tells the story of your data.

  • You may find it helpful to use Vary symbology by attribute to make the larger circles more transparent, so they don’t blot everything out.

Label the countries so people know where these things are happening, and if terrain is relevant to the story you’re telling, try the shaded relief from Natural Earth or Shaded Relief Archive – just don’t let it overwhelm your data.  Once you’ve selected a final region, don’t forget to set an appropriate map projection.

Tips for Success

  • Pick your map extent after you look at the data.  You might be telling the story of the Syrian Refugee Crisis, or the Rwandan Genocide, but how much area does your map need to show?  It’s often best to determine this after the first basic symbolization, when you can see the area of impact of an event.
  • Make the symbols bigger than you think.  The default setting for proportional and graduated has a top size of something like 18 pt, which is not nearly large enough.  In most cases, you are talking about the mass migration of millions of people, and the map should demonstrate the magnitude of that.  It’s okay if they overlap – this topic should hit you in the feels, and tiny circles won’t do that.
  • Label with commonly recognized names.  The data contains the full formal name for all the countries, but consider your audience.  The shorter, more common names are probably a better choice, both for readability and aesthetics.