ArcGIS Pro Tutorial: Create Attractive Label Expression Using Python in ArcGIS Pro
Credit: Youtube Channel “Terra Spatial”
You can see all the tutorials from here: Techgeo Academy.
Create Attractive Label Expressions Using Python in ArcGIS Pro
Learn how to create dynamic and visually appealing labels using Python expressions in ArcGIS Pro
Labels are essential elements in cartography that provide context and information about map features. While basic labeling is straightforward in ArcGIS Pro, leveraging Python expressions can transform your labels from simple text to dynamic, informative, and visually stunning elements that enhance your maps significantly.
Why Use Python for Label Expressions?
Python label expressions in ArcGIS Pro offer several advantages:
- Dynamic Content: Display calculated values based on attribute data
- Conditional Formatting: Apply different styles based on attribute conditions
- Data Manipulation: Format numbers, dates, and text for better readability
- Advanced Logic: Create complex labeling rules with multiple conditions
Getting Started with Python Label Expressions
Step 1: Enable Labeling
First, ensure your layer has labeling enabled:
- Right-click on your layer in the Contents pane
- Select Labeling → Label Features
- Or go to the Labeling tab and click Label
Step 2: Access Label Expression Editor
- Select your layer in the Contents pane
- Go to the Labeling tab
- Click on Label Class → Expression
- In the Label Expression dialog, change the Parser to Python
- Check the Advanced checkbox to enable full Python scripting
Basic Python Label Expression Examples
Example 1: Simple Field Concatenation
def FindLabel([NAME], [POPULATION]):
return [NAME] + " (" + str([POPULATION]) + ")"
This expression combines the NAME field with population data in parentheses.
Example 2: Conditional Formatting
def FindLabel([POPULATION]):
pop = [POPULATION]
if pop >= 1000000:
return "<CLR red='255'>" + "{:,}".format(pop) + "</CLR>"
elif pop >= 100000:
return "<CLR red='0' green='0' blue='255'>" + "{:,}".format(pop) + "</CLR>"
else:
return "{:,}".format(pop)
This expression changes the color and format of population labels based on their values.
Advanced Python Label Techniques
Working with Dates
def FindLabel([DATE_ESTABLISHED]):
import datetime
date_str = [DATE_ESTABLISHED]
if date_str:
try:
date_obj = datetime.datetime.strptime(date_str, "%Y-%m-%d")
return date_obj.strftime("%B %d, %Y")
except:
return date_str
return ""
Formatting Numbers and Currency
def FindLabel([REVENUE]):
revenue = [REVENUE]
if revenue is not None:
return "${:,.2f}".format(revenue)
return "N/A"
Multi-Line Labels with HTML Tags
def FindLabel([NAME], [TYPE], [RATING]):
name = "<BOL>" + [NAME] + "</BOL>"
type_info = "<ITA>" + [TYPE] + "</ITA>"
rating = "Rating: " + str([RATING]) + "/5"
return name + "\n" + type_info + "\n" + rating
Styling Labels with HTML Tags
ArcGIS Pro supports various HTML tags for label formatting:
Tag | Description | Example |
---|---|---|
<BOL> | Bold text | <BOL>Important</BOL> |
<ITA> | Italic text | <ITA>Note</ITA> |
<UND> | Underlined text | <UND>Title</UND> |
<CLR> | Colored text | <CLR red='255' blue='0' green='0'>Red Text</CLR> |
Best Practices for Python Label Expressions
- Error Handling: Always include try-except blocks to prevent labeling failures
- Performance: Keep expressions simple to maintain good map performance
- Readability: Use clear variable names and add comments to complex expressions
- Testing: Test expressions with various data scenarios
- Consistency: Maintain consistent formatting across similar label types
Troubleshooting Common Issues
Expression Not Working
Check these common issues:
- Ensure the Parser is set to Python
- Verify field names are correct (case-sensitive)
- Check that the Advanced checkbox is selected
- Look for syntax errors in your Python code
Labels Not Appearing
If your labels aren’t displaying:
- Confirm labeling is enabled for the layer
- Check that label class visibility is turned on
- Verify label scale dependencies
- Ensure there’s sufficient space for label placement
Frequently Asked Questions
Can I use Python libraries in label expressions?
No, ArcGIS Pro label expressions have limited Python functionality and don’t allow importing external libraries. However, you can use built-in Python functions and basic modules like datetime.
How do I reference field values in Python label expressions?
Field values are referenced using square brackets: [FIELD_NAME]. For example, [POPULATION] or [NAME].
Can I create multiple label classes with different expressions?
Yes, you can create multiple label classes for a single layer, each with different expressions, symbology, and placement properties. This is useful for showing different types of information with varying formatting.
How do I format numbers with commas as thousands separators?
Use Python’s string formatting: “{:,}”.format(number) will add commas to numbers. For example, “{:,}”.format(1000000) returns “1,000,000”.
Why are some of my labels showing <Null> or blank?
This typically happens when field values are NULL or empty. Add validation in your expression to handle NULL values, for example: if [FIELD] is not None: return [FIELD] else: return “”
How can I control label placement?
Label placement is controlled through the Labeling tab properties, not the Python expression itself. However, you can influence placement by controlling label content and using label classes with different placement properties.
Can I use Arcade expressions instead of Python?
Yes, Arcade is the newer expression language in ArcGIS Pro and is often easier to use than Python for labeling. You can switch the parser from Python to Arcade in the Label Expression dialog.
How do I debug my Python label expressions?
Unfortunately, there’s no direct debugging in the label expression editor. Test your logic by creating similar code in a Python script or use simple print-like statements to understand the data flow. Also, start with simple expressions and gradually add complexity.
Conclusion
Python label expressions in ArcGIS Pro provide powerful capabilities for creating professional, informative labels that enhance your maps. By mastering these techniques, you can transform simple attribute data into compelling visual narratives that communicate complex information clearly and effectively. Remember to start simple, test thoroughly, and gradually implement more advanced features as you become comfortable with the syntax and capabilities.
With practice, Python label expressions will become an invaluable tool in your GIS workflow, enabling you to create stunning, data-rich maps that stand out from the crowd.