How is the Python expression written (i.e. what is the syntax?) to change a field's labels from its unique values to custom labels?
The field I'm working with is DISTRICT. Its unique values are 1, 2, 3, 4, and 5.
On my map, I want the districts to be labeled with their supervisors' names, instead of with their numbers.
It is pretty simple.
def FindLabel ( [DISTRICT] ):
if DISTRICT == 1:
return "Bob Hope" #Input your supervisor name there
elif DISTRICT == 2:
return "Bob Costas" #Input your Supervisor name there
elif DISTRICT == 3:
return "Bob Marley" #Input your Supervisor name there
elif DISTRICT == 4:
return "Bobby Bowden" #Input your Supervisor name there
elif DISTRICT == 5:
return "Bob the Clown" #Input your Supervisor name there
Similar to that, just use if/elif statements to evaluate the value of District and return the name you want.
Use Python for parser and advanced expression checked.
I entered
def FindLabel ( [District] 😞
if District == 1:
return "Bob Hope"
but the response to clicking the Verify button was "Carriage returns are not allowed in simple expressions."
I took out the extra "=" in front of "1", but the Verify response was the same.
Like I said, make sure the advanced box is checked.
It doesn't allow multiple lines of code for simple expressions, so the advanced box needs to be clicked
Ok, I've got Advanced checked and Python for parser. That validates the expression.
But in the Expression Verification window, the Sample Text String and Sample Label are blank.
When I press OK to get out of Expression Verification / Label Expression / Layer Properties windows, my map updates, but without labels; they are all blank.
The expression I have entered is:
def FindLabel ( [DISTRICT] 😞
if [DISTRICT] == 1:
return "Bob Hope"
can you check to see if DISTRICT is a text field(string type) or a numeric type?
If text, make it if int([DISTRICT) == 1:
That's nice, I was't aware of this possibility.
If the list get a little longer, you may want to consider using a dictionary, like this:
def FindLabel([YourFieldName]):
dct = {1: "Bob Hope", 2: "Bob Costas", 3: "Bob Marley",
4: "Bobby Bowden", 5:"Bob the Clown"}
district = int([YourFieldName])
if district in dct:
return dct[district]
else:
return "<ITA>Unknow supervisor</ITA>"
I used this on the feature ID (FID) field of a shapefile with values ranging from 0 to 7 and got this:
It's a text field.
def FindLabel ( [DISTRICT] 😞
if int( [DISTRICT] ) == 1:
return "Bob Hope"
still returns blank labels.
Hmm, mine works just fine on a sample dataset. Did you make sure that you turned labels on for that layer? Also, python is case sensitive, so make sure that your field is syntactically correct(proper upper/lower case, spaces,etc. included.
Yes, the layer's labels are turned on, and the expression appears to be syntactically correct.
I also tried Xander's suggestion:
def FindLabel([DISTRICT]):
dct = {1: "Bob Hope", 2: "Bob Costas", 3: "Bob Marley", 4: "Bobby Bowden", 5:"Bob the Clown"}
district = int([DISTRICT])
but same result: expression is validated, but with blank labels. I'll continue to test....