top of page

Small Cartographic Adjustments for
Designing Better Maps

In this Master Class presented at the University of Pennsylvania, I go over creating choropleth maps. The goal of the class is not to focus on technology, but on the small adjustments students and professionals can make to improve their maps regardless of the technology. I happen to teach this in ArcGIS Pro, but these concepts can be applied in QGIS, R, Adobe Illustrator, and more!


  • Create one layout with five choropleth maps of US Census data on Housing Unit Occupancy

    • County-level Housing Unit Data​

      • Lower 48​

      • Alaska

      • Hawaii

    • Census Tract-level Housing Unit Data​

      • Pennsylvania​

      • Philadelphia Metro area

  • Emphasize state boundaries​​

  • Shared classification & color scheme across all maps

  • Clearly designed legend

  • Legible page design & layout

  • Legible titles, subtiles, data source/author info, & scalebars

  • Projected map

Learning Objectives

  • Learn to make a beautiful choropleth map layout 

  • Get familiar with classification schemes

  • Create a balanced layout with multiple map frames

  • Create and customize a legend

  • Understand the concepts of basic map design to employ in your own maps!

1. Get Started

I have created an ArcGIS Pro project for you to quickly get started. The goal of this Master Class is to learn about the principles of designing a good map, not to get too hung up in the technology. I want you to be able to take these concepts and apply them to maps you make in QGIS or R.

  1. Download the ArcGIS Pro project & Open

  2. You will notice that you have several tabs at the top of your page: Lower 48, Pennsylvania, and Philadelphia.

  3. Open each tab and on the left-hand side you will see your Contents pane. These are your layers.


2. Every Map Needs a Projection

First off, all maps need to be projected. This is important for how the map looks and the assumptions people make from what they see (THINK: Mercator Projection). But it also has the potential to affect how your analyses are conducted. What map projection you pick depends on your spatial extent, scale, and purpose of your map.

We’ll be using the Albers Equal Area Conic projection for our Lower 48 Map and the Pennsylvania State Plane South Projection to our PA & Philly Maps. An equal area projection (like Albers) is good for a choropleth map of the Lower 48 because it doesn’t distort area. Since we are looking at areas (aka polygons of counties), this makes sense to choose a projection that doesn’t distort the area. The State Plane projections are great for maps at the scale of PA & Philly.

  1. Double-click on the name of the map at the top of the Contents pane to open the Map Properties Window. -> Select the “Coordinate Systems” tab (on the right).​

  2. Now you can search for the correct projection for each of your maps

  • Lower 48 -> USA Contiguous Albers Equal Area

  • PA & Philly -> NAD 1983 State Plane Pennsylvania South FIPS 3702 (Meters)

Can you see the difference now that you have projected your maps?

3. Make a Choropleth Map

We want to make three choropleth maps with matching legends (aka the same class breaks). The Lower 48 & PA maps will show Housing Vacancy by County (US_Counties_Housing) and the Philly map will show the same data by Census Tracts (PA_CensusTract_Housing).

We want to make sure the legends match because then we are able to easily compare between the different scales & extents of the three maps. ArcGIS makes it really easy to pick a classification scheme that is specific to the data shown on that map, but it is more complicated to create your own classification scheme so several maps are comparable.

​6. Go back to your Lower 48 Map, right-click on the US_Counties_Housing layer in the Contents Pane -> “Symbology”

7. Click the dropdown menu where you see the words “Single Symbol” and now select “Graduated Colors”

8. Change the Field to VacancyRat and the Color scheme to the Yellow-Green-Blue (5 classes) option

ArcGIS now makes it super easy to pick good color schemes by using colors from But if you are using another software like R, there is a ColorBrewer library which helps you pick out colors.


Brief Interlude:

The color schemes in ColorBrewer are well tested and have been shown to have large enough differences between the colors to be discernable. I always think about whether my data is sequential, diverging, or qualitative before picking a color scheme.

Sequential data is ordered, diverging is ordered but with a meaningful midpoint (i.e., the national average), and qualitative color schemes are best for nominal data types (e.g., favorite ice cream flavors or preferences for dog breeds).

9. When deciding on class breaks, you will want to look at the distribution of the data to determine your class breaks. You are welcome to do this through ArcGIS Pro, or have a look at this basic graph from Excel to figure out where you want to put your class breaks.

10. You will need to type in your “upper values” for your class breaks. Feel free to follow the same class breaks as I did (0.05, 0.12, 0.25, 0.5, 1.0)

One of my favorite “hacks” is to give the outlines of your enumeration units (in this case counties) a lighter outline. This helps your reader focus on the “data” rather than the outlines taking all of the “ink” on your page. See more on Tufte’s Data/Ink ratio. The default in most software is black outlines which takes away from the data you are trying to show. Is the goal of your map to show the borders of your enumeration units? Or is the goal of your map to show the differences in color between different units?

11. To give your polygons a light outline click on “More” and select “Format all symbols”. This will open the “Gallery”, but select the “Properties” tab to change the symbols how you would like. Let’s select a 10% Gray.

12. Repeat steps 6-11 for the PA map and the Philly map. Note the Philly map uses Census Tracts instead of counties, but you want to make sure you use the same values for all three maps so you can easily compare between the three.

What patterns do you see?
How does Philly compare to the Lower 48 map?

4. Add Context

One of my biggest pet peeves is when I see thematic data just floating in space on a map. Philadelphia, for instance, is not an island! We want to have geographic context! I’ve given you several other layers to give your data context. Let’s make all of our contextual information gray so that our thematic data stands out.

Philly Map

​13. Go to the Philly Map & Select “delawareriver” in the Contents pane. Your Symbology Pane should already be open on the right-hand side of your screen.

14. Click on the color swatch (in my case it is pink). This will open an advanced pane where you can change the Fill to 10% Gray, and set the Outline Color to “none”

Now we are going to set our US_Counties layer as the context for our Census Tracts of Philadelphia

15. Double-click on the US_Counties layer in the Contents Pane to open the Layer Properties

16. Select the “Definition Query” tab and add a query “Where ‘cb_2020_5’ IS NOT EQUAL TO ‘Philadelphia’” This query is telling the GIS to draw all of the counties that aren’t Philly. Hit OK and now you will see the symbolized Census Tracts and all of the other county data is obscured

17. Now let’s symbolize those counties. Select US_Counties in the Contents > Change the color to 40% Gray Fill and 10% Gray Outline

PA Map

​18. Follow these same steps (15-17) for the PA map on the USA_State layer. Set the Definition Query to “’STATE_NAME’ IS NOT EQUAL TO ‘Pennsylvania’” & choose the same colors

Lower 48 Map

We are going to do something slightly different for the Lower 48 Map

19. Bring the USA_State layer to the top of the list of layer in the Contents Pane

20. Change the symbol to just a black outline with no fill (Hint: the easiest way to do this is by selecting the first option in the “Gallery”)

21. Now change the symbology of the “ne_10m_admin_0_countries_lakes” layer to “No outline” and 40% Gray Fill

How do your maps look now? Do you feel like you took your maps from basic “GIS Map” to something that you might want to share with others?

5. Let’s Label!

Often when we are in a rush and we have been looking at data for so long we forget that someone might not know where this place is or think that someone might need more context. And let’s be honest, labeling takes time and kinda sucks. But I want to challenge you on your maps to really to try to label, at least a little bit to give context to your maps.

We are going to minimally label a few polygons to just give our maps some context:

  • Lower 48 Map: Mexico & Canada

  • PA Map: Neighboring States

  • Philly Map: Neighboring Counties & Delaware River​

PA Map

​22. On the PA Map, 1) Select USA_State in Contents -> Select Labeling, 2) Label.

Have a look at the labeling for the States. I didn’t love the label placement here. For instance, Delaware is labeled at the bottom of the state, and District of Columbia is too big for the polygon. There are lots of ways to move labels around, but one easy way in ArcGIS is to just tell the software you are labeling a different type of polygon. The labeling engine will then try to optimize the labeling for that use case.

23. I found switching the labeling to “Land Parcel” worked well to improve the label. I chose white lettering and I picked a non-Default font.


Lower 48 Map 

24. Turn on the labels for Canada & Mexico. Have fun and mess around with the design of the labels but try to keep consitency with the other labels you may have already placed. I made mine White to match how I did it on the PA map and I picked the same non-Default font.

Keeping a total of 2 fonts on your whole map (all labels, plus title, credits, etc.) is good practice. It is easy to get carried away with all of the different fonts you can choose from. I often pick one serif and one sans-serif font and try to stick with them throughout the map layout.

Philly Map

Finally, on the Philly Map let’s label the River & the surrounding counties.

25. For the counties, the field you want to label on is cb_2020_6. Again, I went with White and the same non-default font

26. For the River, set the SQL Query to “Where ‘NAME’ is equal to ‘Delaware River’. I chose a dark gray & a non-default font. Here you are welcome to chose a different font than the others, but I chose something that was the same to avoid having too many fonts.

27. You will want to change the Label Placement to Watermark (Polygon) to place the label nicely in the river.


Again, it is easy to avoid adding labels because they take time, but it really does elevate your map and make it much easier for someone else to read.

Do you see the difference?

Let’s Lay it All Out in the Layout

Maps these days are not always placed on a 8.5x11 page, but the same principles apply to web design if you are going to have a map work within a web page.

I also will start this section by saying that the layout in ArcGIS Pro is not the most intuitive. My goal here is for you to understand some of the concepts of layout design that will elevate your maps in the future, try not to get too bogged down in the software.

28. Click on the Layout tab at the top of the map

29. You will see your 3 maps here. You want to maximize the area in each of the maps to focus the reader on the thematic data (choropleth map) within each frame. To do this, you need to right click on the map frame on the page -> Activate

30. Once your Map Frame is activated, you can move your map around, change the scale, etc. Again, maximize the area in the map frame to focus on the thematic data (not the context data). You might need to adjust the scale by typing it in.

31. There are two ways to deactivate your map frame.

32. Get all three map frames to look how you want through activating and deactivating and changing the scale.

Screenshot 2023-04-11 at 8.52.01 PM.png

Now we want to make sure that all of the map frames line up in our layout.

33. Add “Guides” at ½ inch from each side of the page. I do this automatically in case I print I won’t have information outside the margins. I also do this so I have a even amount of space between the map elements and the edge of the page.

34. Now we want to move our map frames to the edge of the page. You also want to try to have an even amount of white space between the three map frames. Not doing so makes your map look sloppy. You can select multiple map frames using “Shift + click” and then right-click -> Align or Distribute depending on what you want to do.

You should now have a decent layout of the three maps. Do you like it? Is there something you would change?
Screenshot 2023-04-11 at 8.57.26 PM.png

Adding a Legend & Legend Basics

Because of the odd space we have left in our layout, a horizontal legend might make the most sense. There isn’t really a preference on horizontal or vertical orientation, it often comes down to what makes sense for the layout and what makes sense for readability for your particular map. In this case, we have a space that is best for a horizontal legend.

​35. On the Insert tab on the Ribbon, Insert a Legend. You can just pick any of the options. We are going to customize it, so it doesn’t really matter.

36. Click and drag to place your legend. It can go anywhere because you will customize it.

Adding a Legend & Legend Basics

Because of the odd space we have left in our layout, a horizontal legend might make the most sense. There isn’t really a preference on horizontal or vertical orientation, it often comes down to what makes sense for the layout and what makes sense for readability for your particular map. In this case, we have a space that is best for a horizontal legend.

​35. On the Insert tab on the Ribbon, Insert a Legend. You can just pick any of the options. We are going to customize it, so it doesn’t really matter.

36. Click and drag to place your legend. It can go anywhere because you will customize it.

Screenshot 2023-04-11 at 9.07.01 PM.png

Here's what my map looks like now

Screenshot 2023-04-11 at 9.10.23 PM.png

37. Right-click on the legend -> Convert to Graphics

38. Right-click again on the Legend -> Ungroup (DO THIS 2X). Now all of the pieces of the legend are separate, and we can customize.

Screenshot 2023-04-11 at 9.15.24 PM.png

39. Delete everything that isn’t necessary in a legend. We don’t need the USA_State for instance, or the word “Legend”. I renamed the “Legend” to something more descriptive -> “Housing Vacancy Rates”.

40. Put the color swatches in a horizontal orientation. 

41. Select all of the color swatches and right-click -> Properties. Go to the Symbol Tab and Change the Outline color to White.

42. Let’s increase the size of the legend. Select all of the swatches again -> Right-click -> Group. Click and drag to the right to increase the width of all of the swatches.

Screenshot 2023-04-11 at 9.31.00 PM.png

43. Remember to keep the number of fonts to two including your labels. So make sure the fonts in your legend don’t add to that number.

How does this legend differ from the legends you have been adding to your maps? Do you like it?
Screenshot 2023-04-11 at 9.32.34 PM.png

Adding some basic marginalia

Now let’s add a title, your name, and the data source. Again, in today’s world it is easy to leave these things behind in an effort to get people the mapped data as quickly as possible, but remember, not everyone has the same context and knowledge as you. So spend the time to focus on what the title is and explain what it is showing with the title.

45. On the Insert tab on the Ribbon -> Insert Normal Text. I highly suggest thinking about your visual hierarchy here. Your title should be biggest, followed by your legend. Your name and the data source can be small, perhaps even gray instead of black and placed down in the corner.

You’re all done! Congrats!

I hope that this helped make clear some of the things that we should consider when mapping. Always provide context data, try to label, think about your layout design, and remember to add a title that describes the content to your map reader.

What else would you add?
bottom of page