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.


Hacking the Firefly Basemap

Related image

John Nelson, the name to know in Firefly Cartography, has been making these eye-catching gems for probably a decade now.  And, true to form, he’s always trying to find ways to make them more accessible to anyone who wants to make them.

Toward that end, he released a nifty Firefly Basemap Starter Pack a short while back, and my students were overjoyed that they could simply download the ArcGIS Pro project file, skip all that imagery gathering, desaturation stuff and get right to the fireflies.

Enter disappointment.  Whether it is something to do with our IT configuration here on campus, or student file management skills, many of my students found that the basemap project was cantankerous, losing data sources or just plain not displaying.  Every time they sat at a new computer to work on the project, they had to re-download the project file and then rebuild their maps.

So, to make their lives (and mine!) easier this semester, I set about hacking John’s project.  Many years ago, when he was still keeping the firefly technique for his own personal glory, he introduced a blog post on Severe Satellite Basemaps, which the savvy reader will spot immediately as the foundations for the firefly technique.  This post details downloading Blue Marble images from NASA and desaturating them, for a dramatic backdrop to your data.

I’m generally a pretty lazy person, so rather than wade through all of those beautiful images (they’re a glorious place to get lost), I figured I’d just ride John’s coattails and dissect his Pro project instead.  This way, he’s done all the hard work of collecting the images, setting up the layers and customizing them, and I can simply bask in the sunlight of having fewer student issues, and also tricking them into working a little harder for that firefly-y goodness.  (See, John? I can make up words too!)

So, if you’re having some challenges with that Pro pack yourself, or you just want a little peek into John’s genius/madness, here’s how to do it yourself:

Getting the Goods

Grab that starter package from here.   Because of our IT policies, we’re still in Pro 2.2, so the Open in ArcGIS Pro option doesn’t work for us, but the Download option does.

Simplify your life, or at least your Contents pane.  John built in some nifty, scale-dependent layers on the side, and as you zoom in and out, you’ll notice that only one of these displays at a time.  Zoom to the level that you want for your basemap, identify which of the groups (0-5) is displayed, then remove the rest of them, just to make life less confusing.  My students will be working with data for North America, so I zoomed in there, which turned out to be group 2, given my screen size. YMMV.

Get coordinated.  In my map, although the map frame is displayed in Web Mercator, the individual image tiles all act like they don’t know they have a coordinate system, so exporting the raster layers proved a little tricky.  So, I exported the vector layers first, because they’ve got it together, and will export as WGS 1984.  Once you export one of them and let Pro add it to your map, the raster export tool will now let you choose that layer as a CS for the raster export.

Only take what you need.  If you look closely, you’ll see that Coast and CoastGlow are the same layer with different symbology treatments.  Same for LatLongOceans and its glowy counterpart.  So just export one of each, and then you can reuse them in your new basemap (more on that later).  Same for the Color and Black and White imagery layers – they’re just duplicates, symbolized differently.  I also poked around to see which tiles were displayed in my North America extent, and chose only to export those couple of tiles, but choose whichever ones are visible in your extent, or take them all.  It’s your disk space.

To vignette or not vignette?  The vignette effect is pretty subtle, but can be pretty cool.  In my chosen extent, it barely shows up, so I decided not to export it, but you do you.

You should now have all the layers you need: a Coast layer, a LatLongOceans layer, a set of image tiles, and optionally, vignette layers.

Putting it all back together

Here’s where I reveal John’s secrets.  For reassembly, I recommend a fresh Pro project, just to get rid of any lingering whatever that caused my students such grief.

  1. Set your map frame background to Black.  (This is also a great time to set your display CS – see previous post on Projections and their misuse.)
  2. Bring in your image tiles, and group them.  Name this group Color, and set it to 80% transparent
  3. Copy the Color group, and paste it into your map frame.  Rename it Black and White, and move it to the bottom of your layers.  Set the group to 30% transparent.
    1. Set the Symbology for each layer in this group to Stretch, and use the default grayscale ramp.
  4. Add in your LatLongOceans layer.  Symbolize as Unique Values, using the field DEGREE5.  Remove all values, then add back in just the Y value.
    1. Change the symbol to something bright blue (although an orangey-yellow can look pretty cool, too), set the line weight to 0.5pt and the layer to 80% transparent
  5. Copy LatLongOceans and paste it into your map frame.  Rename as LatLongOceansGlow and move it underneath LatLongOceans.
    1. Adjust the line weight to 5pt and the layer transparency to 95% transparent
  6. Add the Coast layer to your map.
    1. Set the fill color to No color and the outline to Sahara Sand, 0.5 pt, and make the layer 75% transparent.
  7. Copy Coast and paste it into your map frame.  Rename as CoastGlow and move it underneath Coast.
    1. Adjust the outline to 3 pt and set the layer to 95% transparent.
  8. Optional: Add in the vignette layers.  These should already be suitably transparent, but feel free to adjust.

And there you have it.  You should now have a a snazzy but low-key basemap ready for firefly-ification.

With thanks to @John_M_Nelson for allowing me to ruthlessly dissect his contributions!