ArcGIS Pro

ArcGIS Pro: The many ways to symbolize by size

You have data with a range of values, and you want to represent it on a map using symbols that range in size. Sounds simple enough. But it turns out there is more than one way to size your symbols in ArcGIS Pro, including Graduated symbols, Proportional symbols, Vary symbology by attribute and Symbol property connections. How do these work differently and how do you know which one you want to use?

Want the short version? Scroll to the end of this article.

Use this to break your data up into a series of classes or bins. For example:

6 symbol classes representing 6 classes of settlements

This map only has 6 sizes, not a continuous range of sizes. You get to decide how many people a settlement needs before it qualifies as a small town vs a large town. And if you don’t know where to make the break there’s a number of different methods available for classifying your data, including Natural Breaks, Quantile, and Standard Deviation.

Use this if you want to show a continuous range of sizes instead of discrete classes. But there’s more to it than just that. In fact there are three different ways to use this symbology method:

Size range
Use this if you want the simplest representation of your data as size. Pick a min size – your smallest village will draw at this size. Pick a max size – your largest megacity will draw at this size. All other towns will scale between these min and max sizes.
Hint: Use the histogram to understand how your data is distributed. In the example below, almost all of the values are going to draw with small symbols, thanks to an outlier of 3 million. Also note how those pesky -99999s, meant to represent null values, are skewing the results:

histogram ranging from -9999 to 3 million

You can drag the “stops” on the histogram or edit their values if you want to show a more noticeable range of sizes on your map:

histogram ranging from 0 to 800,000

Now features with a value of 0 or less will draw with the minimum size, and features with a value of 800,000 or greater will draw with the maximum size.

True proportional size
Use this if you want to draw symbols which are truly proportional to one another. For example: City A has a population that is twice as large as City B, so you want Symbol A to draw twice as large as Symbol B. To accomplish this, choose None as the max size. Now your smallest value will draw with your min size. All other symbols will grow proprotionally from there.
• Only values greater than zero will draw.
• Often when you choose this option, your symbols will blow up to enormous sizes, sometimes flooding the entire screen. True proportional symbols are not appropriate for all value ranges.
• When I say that one symbol is twice as large as another, I mean its area is twice as large, not its point size, or diameter, or circumference. Specifically, the square root of the data value will be used as the radius to calculate the area of a circle symbol.

Direct size
Use this if you want to represent the real sizes of your features. This option does not make sense for our cities example. But it does make sense if you have a dataset of trees, with an attribute representing their crown width in meters:

Unit = Meters, Data represents = Radius

But wait – your values represent the diameters of the trees, not their radii. So set an Arcade expression instead of a field: $feature.SIZE/2. Now your symbols will draw on the map at the same size as the trees grow on the ground.
• This option is only available if your map uses a projected coordinate system.
• Your symbol choices are limited to circles and squares. That’s because calculating the area or radius of a bicycle-shaped symbol can’t be done with any real accuracy.
• Only values greater than zero will draw. Only magic can draw a symbol that is -3 meters large.

Use this if you are already symbolizing your features with color or shape and want to vary them by size as well. Maybe your cities are drawing with a range of colors to represent average income, and you also want to vary their size to represent population.
You have three options here:

Size range
This works the same way as Size range in Proportional Symbols, described above. To access this option, check the Enable size range checkbox and a histogram will appear.

Maybe you don’t know how big each tree is in your dataset, you just need to show that the city has trees, and sizing them randomly will create a more realistic effect. Choose Random from the field picker and pick a min and max size.

Direct size
This works almost the same way as Direct Size in Proportional Symbols, described above. But it’s less strict. You don’t need to use a projected coordinate system, and you can apply it to any symbol you want. Using this option, symbol sizes are derived directly from the attribute values, and drawn using the current symbol unit. Usually that’s points. So a town with 500 people will draw as 500 points. Clearly this is not the option you want to use for population data. But it can work well with roads, to make a 4 lane highway draw as 4 points wide:

highway map of O'ahu symbolized by number of lanes

Use this to control the size of specific properties or layers within symbols. Sometimes you may want only one part of your symbol to change in size, while the rest remains the same. For example you have county polygons drawn with a hatch fill. You would like those hatches to be thicker or thinner based on how much herbicide was used in each county.
On the Format Polygon Symbol pane, check Allow symbol property connections and then click on the data icon next to the property you want to scale:

Set line width to an expression instead of a static value using "Allow symbol property connections"

• This property works in the same way as Direct Size in Vary Symbology by Attribute: if the value is 5, the symbol will draw 5 pt large. If your values range from 1,000 – 5,000, that’s going to be a problem. But don’t worry. You can use an Arcade expression instead of a field. Maybe $feature.yourfield/1000.
• The control still says “1 pt” but when the data icon turns blue, it means that an attribute has been connected, and this will override the size property.

If you are working in a scene, having three dimensions offers extra possibilities. If you want to, you can scale each of those dimensions separately. Use this if you want to vary symbols by perspective height or volume. Note that height and volume aren’t the same thing as size visual variable, but they are used with similar intentions.

Use this if you want to extrude your feature’s geometries based on a field or expression. This is fun when you have building footprints with an attribute for height:

Set extrusion on the Appearance tab of the ribbon.

Vary symbology by attribute
Use this if you want to symbolize by volume, or if you want to scale the height of a 3D symbol differently than the width. In 3D, you are offered an extra checkbox for Maintain aspect ratio. Leave it checked to show true volumetric differences with 3D symbols. Uncheck it and you will see all of the options duplicated – once for Height (Z axis) and once for Width (X and Y axes.)

uncheck "Maintain aspect ratio" to set Height and Width separately

Hint: In scenes, you can choose to display your data in real-world units (such as meters) instead of screen-size units (such as points). Open Layer properties to the Display tab and check Display 3D symbols in real-world units. In the example below I’ve drawn well bores with their true depths and exaggerated diameters:

underground 3D map of well bores

You need to do a few extra steps to accomplish an underground well map like this:
• Choose one of the cylinder symbols from the ArcGIS 3D style.
• Modify the symbol’s properties so the anchor point is on the top of the symbol:

• Open Map Properties to the Elevation Surface page and check Allow navigation below ground.

Proportional symbols
Use this when you want to scale only the height of a symbol, and you also want to take advantage of the special properties of True proportional or Direct size.
Hint: Extrusion only stretches geometry. So if you extruded some points and were disappointed because they turned into hollow cylinders, try using Proportional symbols instead. Set the Data represents property to Height and choose a 3D symbol for your template:

map of waterfalls displayed with 3D height

• The size of the base/width of these stretched symbols can be set by changing the size of the template symbol.
• Remember that perspective can skew perception of size – those symbols which are farther away will be smaller, rendering your proportional symbology inaccurate. To avoid this, use a local scene instead of a global one, and on the View tab of the ribbon, change the Drawing mode to Isometric.

Symbol property connections
Use this if you want to symbolize volume and control the size of each axis (X, Y, and Z) separately. You may want X and Z to draw at 10 pt, while Y scales based on your data. Or you may want each axis to scale based on a different attribute or expression:

3D cube symbol with X, Y, and Z axes each set to a different attribute.

To summarize, there’s a lot of different ways to symbolize by size! Below is a recap to help you pick the right one for your map:

Graduated symbols: Use this to break your data up into a series of classes or bins.

Proportional symbols: Use this if you want to show a continuous range of sizes.

Size range

True proportional size

Direct size

Vary symbology by attribute: Use this if you are already symbolizing your features with color or shape and want to vary them by size as well.

Size range


Direct size

Symbol property connections: Use this to control the size of specific properties or layers within symbols.

Extra options in 3D: Use this if you want to vary symbols by perspective height or volume.


Vary symbology by attribute

Proportional symbols

Symbol property connections

About the author

Heather is a cartographer and artist who mixes both practices to express and understand landscapes. She writes and edits lessons for the Learn ArcGIS website. View more of her work at


Next Article

ArcGIS Maps SDK Beta 2 is available!

Read this article