My favorite part of mapping is the text. Perhaps you disagree and find the task of “lettering” a map to be time consuming and tedious. But text can make or break a map, and getting it right can feel like solving a particularly satisfying puzzle. So if you want to improve your labeling skills, or simply enjoy typography, read on.
This tutorial was tested and updated on October 3, 2022 with ArcGIS Pro 3.0.
This tutorial is the first post in a four-part series about map text in ArcGIS Pro. You can find all tutorials here:
You can follow along (to whatever degree of perfection you prefer) using this project package. By the end, you’ll have a map of the region around Darwin, in Australia’s Northern Territory.
The map is already symbolized. Anything pink won’t appear in the final map, but it’s useful to visualize while you are working with text. Of course, it’s your map now, so you can resymbolize it however you like (but please wait until after the labels are made).
Let’s get started.
In the Contents pane, select the Places layer. On the ribbon, on the Labeling tab, click Label.
Right now all of the labels look alike. They would be more useful if they used different styles to represent different kinds of features. This helps the map reader know if a place called Port Darwin is a town or a bay. To accomplish this, you can set up label classes.
On the Labeling Tab, expand the Class menu and choose Create label classes from symbology.
I’ve already set up symbol classes in the map to match the different label classes that I want to use.
Most of the time, your data will not be so nicely classified. It’s worth your time to examine your data and classify it in a way that supports the kind of labels that you want. It will save you some headaches down the road.
Uncheck Append to current label classes and Scale range and click OK. In the Contents pane, click the List By Labeling tab. Here you can see all of your new label classes.
They are all selected, and that’s a good thing, because the first problem you want to fix applies to them all: the text is black, and it’s hard to read. Typically, maps with an imagery basemap use white text.
On the Labeling ribbon, change the text color to white.
Problem number 2 is that all the labels are in ALL CAPS, which looks classy, but makes them harder to read. Typically, you want to reserve uppercase text for large areas or features of particular importance. The problem is that all of these place-names happen to be stored in uppercase text in the attribute table.
On the ribbon, click the Expression button next to Field to fix this.
The Label Class pane opens. Unfortunately, it’s empty because you have multiple label classes selected. You need to do one at a time. In the Contents pane, select Coastal Feature.
Now you have options! In the Label Class pane, ensure that Language is set to Arcade. Under Expression, type Proper($feature.NAME). The Proper function will display uppercase words in proper case without altering the underlying data.
Repeat these steps to make proper case labels for the Cultural Feature, Homestead, Mountain, and Water Feature layers. The other label classes you’ll leave as uppercase text to make them appear either large or important.
Save the project.
Next, you need to choose a font. On most maps, I recommend sticking to only one (sans serif) font. You still have a lot of options for variety by mixing up the size, color, and style (italic, bold, and so on). But this particular map is kind of text heavy, and in these cases, it’s common practice to choose a pair of fonts: one serif and one sans serif. The convention is to use the serif font to label natural features and the sans serif for cultural features.
For this map’s serif font I chose Bodoni MT, because it has a particularly broad range of styles:
For the sans serif I chose Century Gothic, which is a classic, reliable mapping font.
In the Contents pane, select the Coastal Feature layer.
On the Labeling ribbon, change the font to Century Gothic and change the size to 7.
Wait a minute–didn’t I just tell you to use serif fonts for natural features? Well, that’s why it’s called a convention and not a rule. I decided that this map has more natural than cultural features, and that Century Gothic is easier to read. So I reserved Bodoni for only water and terrain features. For your own map, it’s your call.
Next, select the Water Feature label class. On the ribbon, change the font to Bodoni MT, Bold Italic. For Color, choose Turquoise Dust (#9ED7C2).
Water features are almost always labeled in italics. Italic text is slightly harder to read but suggests something flowing. Water features are also often labeled in blue. In the regular text world, bold imparts emphasis to a word. But in the map text world, bold is sometimes used as the default, since it makes short bits of text in small sizes easier to read.
On the ribbon, click Centered Point.
The gulfs and bays on this map are all different sizes, and later you’ll have to adjust some of their labels to match. But for now, 10 points seems like a good starting point.
Select the Homestead label class. Change the font to Century Gothic Bold 7 pt.
It’s common to use very small text on a map to accommodate crowded features. But anything smaller than 6 points is probably going to be too small to read.
On the ribbon, click the expander button in the Text Symbol group.
The Label Class pane opens. On the Symbol tab, click the Formatting button.
On the map, you can see that some of the labels are stacking, and that’s a good thing. However, their stacking could be tighter. The default space between lines of text is designed for paragraphs, not for maps. Text on a map almost always benefits from condensed line spacing. This make it more obvious which label goes with which point.
In the Label Class pane, change Line Spacing to -2.
This property is also known as leading.
I usually use a default line spacing of -2 for all map labels. On larger fonts, you may want to decrease the leading even further.
Next, we’ll work on rivers.
In the Contents pane, switch to the List by Drawing Order view.
Right-click Streams and choose Label. These labels look pretty bad:
You don’t need to set up label classes for this layer, since you don’t need to distinguish between different kinds of streams. You do, however, have to use that Arcade expression again to convert them to proper case. It went like this: Proper($feature.NAME)
Change the font to Bodoni MT Italic 8 point. For Color, choose Turquoise Dust.
Your rivers already look better.
In the Label Class pane, click the Position tab. For Placement, choose River placement and Offset curved.
Click the Fitting strategy subtab and uncheck Stack label.
Click the Conflict resolution subtab and check Never remove (place overlapping).
Before you checked this box, some of your river labels were not drawn on the map because there wasn’t enough room. That’s a good thing if you are going to use automatic labeling. But if you intend to convert your labels to annotation, you probably want to decide for yourself which labels are important and which can be removed.
Next, turn on labels for the NationalParks layer. Change the font to Black 9 pt Century Gothic Bold.
In the Label Class pane, on the Position tab, choose Regular placement and Horizontal in polygon.
This time you have the opposite problem: the text is stored in proper case and you want to display it in uppercase. You can make this change on the Symbol tab. Under Appearance, change Text case to Upper case.
Large areas (like national parks) are often labeled with uppercase text. It’s part of a strategy that tries to suggest the expanse of an area without dominating the map with large text that appears more important than it actually is. By making the text black, which has low contrast with the basemap, you’re also helping to push these labels into the background. Later, during the annotation phase, you’ll spread the letters out to cover more area without increasing the text size.
The next problem you have is that the park names don’t include National Park. Arcade can fix this one, too. The expression you’re looking for is $feature.NAME + ” N.P.”
All right, that’s enough instruction. I’ll let you handle the rest of the labels on your own. You can set them up whatever way you like, or if you want to copy the properties I’ve chosen, you can refer to the map named Labeled Map in the Darwin project.
Warning! It’s going to look messy.
That’s ok. You can change anything and everything later during the annotation phase. The goal with labeling is to choose and apply the best defaults for each label class, so you have less work to do later.
In my next post, I’ll show you how to convert these labels into annotation and edit them into cartographic perfection.