Understanding Place by Proportionally Dominant Characteristics

Over the years, I’ve been involved in quite a few projects where the client asks for the “supermap”. It normally goes like this: “Can you show us what a,b,c…z look like, and can it be on maps, and we want the information to be compared on the same map.”

These requests can often feel hodgepodge and cumbersome; to the point you’re not sure what to do with the information. They tend to come as a result of some form of consultation or engagement where “key criteria”, “drivers”, or  “target groups” have been identified. While there are a lot of ways to make a supermap (some Bizarros floating around too), I’ll be sharing one that I find helpful when initially probing the data.

I call these “proportionally dominant characteristic” maps. These are a variation on Predominance Maps, which are typically used to display dominance by sub-groups of single characteristics. Familiar examples would be showing what age or ethnic group is largest, or what level of education attainment is most common in an area.

The proportionally dominant map steps outside of a single character group, and tries to show dominance between different characteristics, as opposed to subgroups.

For my chosen example, I’ll be using Wellington census data that was lying around my hard drive. I (somewhat) randomly chose 9 meshblock indicators for my characteristics (that a made-up stakeholder group decided were important for understanding Place Making and Spatial Planning in Wellington). The characteristics are:

  • People Aged over 65,
  • People with College Education,
  • Families with Children,
  • High Income Households,
  • Owned Homes,
  • Labour Force Participation,
  • One Person Households,
  • Rented Dwelling, and
  • Volunteers

While standard predominance may work to compare something like Home Ownership vs Renting, it will not work out of the box for Home Ownership vs Volunteers. You may wonder, “can’t we just normalize everything as a percentage or rate of population, and compare that?”

Short answer, “maybe.” Long answer, if we can assume the rates/percentages have similar distribution, then perhaps. But typically the distribution of different characteristics can vary widely. For example (user warning, made-up stats follow) Home Ownership may range between 35% and 95% averaging 65% and volunteerism may range from 0% to 50% averaging 15%. In this case, Home ownership would likely noise out volunteerism in most cases. We don’t want that, we want to know where the rate of volunteerism is outstanding compared to the rate of Home Ownership.

So this finally gets me to the meat of my method; using proportions. First, this method has two basic assumptions:

  • that all the characteristics have a common relationship with an explanatory variable, and
  • in this relationship, the characteristic scales linearly (ish) with that explanatory variable.

I look at my characteristics and think, “something all of these seem to have in common is that they depend on the size of population in an area.” I look at my distributions of populations by meshblock and see that most meshblocks are between about 50 and 300 population in Wellington. (Note, I don’t actually plan to use population for any calculations; I’m just using it to check my assumptions.)

I then chart each characteristic against meshblocks with population between 50 and 300. While the chart on the left shows a lot of variation, the trend for each characteristic seems positive. I confirm this by smoothing the lines in the right chart. The lazy statistician says, “looks linear to me” and moves forward. The chart on the right also highlights the issue of using predominance. Labour Force Participants have a notably high count compared with the other indicators. If we were to select by the actual value or something derivative of actual value (percent, ratios, etc.), labour force would mostly come out on top.

We’re now to the point that takes a little more effort; calculating the proportions of each characteristic for each meshblock. Or in words, for each characteristic we will need take the observed value for a meshblock and divide by the sum of observed values for all meshblocks.

For example, if the meshblock had 30 volunteers and there were 5000 volunteers in all of Wellington’s meshblocks, the proportion would be 0.006 (0.06%) of all volunteers. The charts bellow show the proportional results for all characteristics. As you can see, the distributions are now scaled in a way that is more comparable. The smoothed lines in the right chart largely overlap, while the actual values on the left show where characteristics stand out against each other in the meshblocks.

With the proportional values calculated, they can be joined to a map of the meshblock. The GIF below cycles through each of the characteristics looks like for meshblocks in the Wellington area.

The last step of this process is to create the supermap. In this case, our supermap is comparing the proportional scores for all 9 characteristics in each meshblock and finding the one which is largest. This can be accomplished by creating and calculating a new field, or by using the arcade predominance formula in symbology (my chosen method).  The results are shown bellow.

Now is the part where we ask “ok, that is cool, but what do we do with it?”

1. Validating Assumption:
Planning and strategies work around a lot of assumptions, assumptions that are founded on experience or professional intuition. We will all say at some point in our careers “I’ve done a lot of work in that area, and I know that ________ is the biggest issue.” Anecdotally we know _______ to be true, but if we are going to do proper project development it needs a bit more evidence base. This map can help to validate such assumption or show where they may need to be re-evaluated.

2. Prioritization and Strategic Intervention:
In some cases this map may be enough to meet the needs of your client or project. Say the characteristics were related to strategic interventions. Areas highest in Characteristic A. will use strategic Intervention 1.; Areas highest in Characteristic B. will use strategic intervention 2; and so forth. We now have a map that shows what the most dominant characteristics are located.

3. Foundation for Further Analysis:
With most of my work, a map like this is only a starting point. It may be used to help me conceptualize the issues spatially before moving on to a more detailed analysis.  What is more, the proportional figures can be used to create new formulas to regroup and reclassify different areas.

For instance we could re-class the meshblocks based on the complexity of apportioned scores (areas low in most characteristics to areas high in several characteristics). We could then know which areas may require more complex interventions.

Or, we could group areas that are high in specified shared characteristics. As an example, we may want to have a special strategy for areas that are proportionally high in families with children and rental homes. We can build a formula to create a new score for areas highest in both. We could even take it a step further and start using machine learning techniques to perform cluster analysis to define and classify the sub-areas.

To close this post off, I’ll say this is just one of many ways to cut data spatially. In my job I am constantly exploring new ways to visualize data to help myself and others understand place. Hopefully I will get a chance to share other methods, maybe even create some samples of a more advanced analysis.

2D Raster to 3D prints

Growing up, I spent a lot of my time building models, dioramas, and train sets; dreaming about taking the craft to ever smaller scales. Flash forward several year, and I purchase my first FDM 3D printer. Naturally, I started pushing the limits of its resolution designing and printing some cool mini’s in the 1:1000 scale range:

Pretty good, however, I knew the precision of the FDM would be a limiting factor for anything more than “impressionist” models. Time warp a couple more years, and I get my first SLA/DLP printer. With an XY resolution of 47 microns (half a human hair) and Z layering to 15 microns (a grain of pollen thick), I would finally be able to get to scales I once dreamed about. I first tested the printer with models  which had failed on the FDM printer.

Promising start, but I more recently decided trying something new; printing an area from the real world. For the first test, I borrowed a raster from one of our coastal projects which has 0.2 meter DEMs. The raster was converted to an .stl file with at a scale of 1:4100 (approximately matching the max XY resolution of the printer). I decided to slice the layers at the minimum thickness (15 microns) to see what I would get. About 4 hours of printing later, and I’m pleasantly surprised with the results:

Considering the scale you’re able to clearly make out the small bumps of the terrain, where streams and washouts are, and even where a hiking trail crosses the area to wind up the hillside. Looking at the layers compared to my thumb print, you can see that several could fit between one groove.

Feeling bold I decide to go a step further. This time, I found a polylayer of Wellington that includes the approximate height and elevation of building, convert it to a 1m DEM raster, and merge it with the 1m Wellington elevation DEM.

I then exported and converted the central Wellington area at three different scales: 1:40,000, 1:20,000, and 1:10,000.

Again, I’m quite pleased with the results. Despite some artifacts de-laminating and attaching to areas they shouldn’t (particularly for the 1:20,000 scale print), the detail is impressive. I was particularly pleased to see the small houses on the hillsides, even at 1:40,000 scale.

Overall, I felt like the test runs were a success. Based on this experience; I’ve ordered in some new printing resins more appropriate for the detail I’m after, and have adjusted the slicing to avoid de-laminating. Until I have new and improved prints to show, I’ll leave this as a parting bonus, the results of the terrain print after some painting and flocking fun.

Logan Ashmore

Displaying Point Data, Part 2: Rotating and Colouring the Stars

In Part 1 of the Displaying Point Data series, I showed techniques on how to better display overlapping point data. These points were not intended to be emphasized, only to give the impression of where events were concentrated. However, within the data is a subset that I wanted to display prominently on the map. This part of the series will cover:

  • augmenting the ESRI’s firefly style, and
  • applying transparency and random rotation to symbol layers to create variation.

First, I created a selection of the points of interest, and created a new layer. I then download the firefly style and added it to my style library.

After sampling several of the firefly symbol options, I decided to create a new symbol using the FireflyShimmer_0 as my starting point.

While this looked good, I wanted the stars to be dynamic and stand out more against the blue points underneath. The first thing you may notice is that the rotation of the stars is uniform. I wanted the flares to have different rotations to add variation and make it easier to see when multiple stars were overlapping.

I changed the rotation using elements covered in Part 1, including making sure the symbol property connections are made and using one of the random number fields (X_Offset or Y_Offset) that was added to the table.  Symbol rotation is found under the layers element of the symbology tab. Note that the first part of the symbol is what creates the flare effect.

Entering a number directly to this field will change the rotation of all symbols by that many degrees. To create variable rotation for each item drawn,  click on the gdb icon to open the attribute mapping and set the expression to 179*($feature.Rand_X). Why 179 instead of 360? The Rand_X field ranges from -1 to 1, so the maximum range of rotation is -179 to 179 (358 degrees). If the rotation range were -180 to 180, Rand_X values of -1, 1, and 0 would overlap.

Comparing the original symbol to the random rotation, the overlapping stars have become much more apparent. Since the random rotation is based on a field attribute, the rotation will remain static instead of changing each time the layer loads. This also allows for the same random rotation to be added to different layers of the symbol.

The next part included adding colour to the flares. I toyed with several variations and realized, for the depth I wanted, the flare needed to be duplicated and layered in 2 different colours (also to create a unique animation effect which will be covered in later parts of the Blog). Duplicate layer is under the structure (spanner icon) in the symbol editor.

With both layers in place, I return to the layers tab and unlock the colours and open the colour properties.

For my final product, I used the following colour settings for the first and second flare (remember to add transparency):

First Layer-

Second Layer-

Of-course these setting were personal preference, there were plenty of other combinations that looked great. The last part I changed was moving the 3rd part of the symbol (a small white dot) to the top of the layer structure. This is done by clicking on the vertical ellipsis next to the layer in the structure tab and dragging the layer to the top.

The resulting stars have a white core and hot orange flares.

The next part of this blog will cover the time series animations that were created using the data. This includes tinkering with the size of the symbol layers using random numbers to create a flaring, twinkling effect.

Project tools:

  • Arc Pro 2.4
  • Excel to Table and XY Table to Point
  • Allowing symbol property connections and using Arcade language
  • Adding and Calculating new table fields
  • Using Living Atlas layers
  • Modification to ESRI Firefly Style
  • Arc Pro Animations

Logan Ashmore

Displaying Point Data, Part 1: Overlap, Transparency, and Randomness


I recently had a project which required me to display a lot of point data with some familiar issues:

  • Many points were overlapping;
  • The ESRI tool boxes I have access to are only standard package; and
  • Data would only be displayed in two symbol categories which can make for a pretty boring presentation.

First things first, I had to get the 660,000+ data points into map from excel. Arc  makes this a simple process using the Excel to Table  and XY Table to Point tools.

Second, I needed to decide the “feel” I wanted from the final product. I was recently inspired by this awesome map using Taxi data in New York  and other maps using ESRI’s new Firefly style. My mind was set on creating something with a dark background and points that appeared luminescent. I went ahead and set my basemap to Canvas Dark and clicked through a couple of bright symbol colours before settling on blue.

With my place holder symbology selected I needed to deal with the next issue; data overlap. The data deals with traffic information, so I knew there would be points stacked (in particular at intersections). To check I clicked on a couple points along intersection; sure enough there were some areas where 30+ points were stacked.

To overcome stacked points when displaying data, a couple of the most popular options are playing with the alpha (transparency) or jittering (scattering) the points. In Arc Pro, there are two quick ways to adjust transparency; however, only one will create the desired effect.  Adjusting the layers transparency in the Appearance tab will treat all points like a single feature, making the transparency uniform. You can see in the first image below how everything becomes muted at 65% transparent. Adjusting the symbols colour transparency will apply the affect to each symbol drawn on the map, making it so colour is more intense where points overlap. For this example, the point symbol colour is set at 90% transparency yet there are still some very intense areas of high overlap.

The second choice, to scatter points, isn’t always advised. Often transparency is enough. However, in circumstances where there are large amounts of data, and portraying concentration is more important than point accuracy, scattering can be very handy.

Arc Pro does have tools like Disperse Markers available to accomplish this, but they are not part of the standard package. This tool will also re-project the point data instead of offsetting the symbols. There is also the choice of using the symbols in labeling and tweaking weightings , though I still want points to somewhat overlap which could be difficult with the label method.

So, one quick and dirty fix involves Allowing symbol property connections and playing with randomness in Arcade language. Once the connection is set, scroll to the bottom and expand the offset distance panel. You’ll see the option for X Offset and Y Offset with the gdb symbol next to each . Click on the symbol for X Offset, to open the attribute mapping window:

Click on the Set an expression button  and type in the code (random()-.5)*2 then repeat the steps for the Y Offset.

Depending on the scale of your display and size of your points, you may or may not notice the points shift. What has this formula accomplished? Random() will return a value between 0 and 1. If we leave it at that, all the points will shift random amounts to the North and East by up to 1 pt. The -0.5 is added to shift the minimum potential value to -0.5 and the maximum value to 0.5. Multiplying by 2 increases the range from -1 to 1. This means all points are now equally likely to shift up to 1 pt in any direction.


If the scatter isn’t enough for your data, simply increase the multiplier and see what happens. In the gif below, you can really start to differentiate the areas that have the most point overlap. For example, in the area below Epsom (left, centre) there are 3 intersections that look similar in size and colour intensity. But as the multiplier increases you can see that one maintains intensity while the other two become diffuse.


Note that a different randomization will occur every time the layer is drawn, so as you navigate or change extent the symbol placement will constantly change.  If you would like to keep the offset constant, or are working with a multi-part symbol, this issue can be worked around.

After testing several symbols, I decided to make a two part symbol that had a faded blue circle background with a darker blue star on top. The above method will no longer work, because the offset will randomize for each part of the symbol, potentially separating the two. To keep the same offset, I added two new fields to the data table, X_Offset and Y_Offset, and calculated the value for each with the earlier random formula of (random()-.5)*2).

To achieve more offset, repeat the attribute mapping steps above, but write the formulas feature$X_Offset*2 and feature$Y_Offset*2 for the X and Y offsets respectively. This will increase the maximum potential offset range from -2 to 2. Separating the multiplier into attribute mapping means you can play with the extent of offset, without having to recalculate the table fields each time. Remember that attribute mapping needs to be done for each part of a multi-part symbol.

As a last observation for Part 1; you may notice when the offset is low, the point scattering may take on a form that looks random or circular. However, as the amount of data, extent, and scatter increases, the areas with the most points will take on a distinctly square shape.

The process outlined was only the first part of my project. The blue points represent total events, are mostly to serve as the background effect for the final maps and animations. In later blogs I’ll review how to scatter points (or not) based on number of proximate points (without using the Near Tool), make a moonlit base layer, and finally how to manipulate Firefly symbology to make the stars twinkle in animations for points of interest.

Project tools:

  • Arc Pro 2.4
  • Excel to Table and XY Table to Point
  • Allowing symbol property connections and using Arcade language
  • Adding and Calculating new table fields
  • Using Living Atlas layers
  • Modification to ESRI Firefly Style
  • Arc Pro Animations

Logan Ashmore