When mapping an value as a color to render a thematic map the objects borders can alter the map readability a lot. For example in this thematic map of the US counties with black borders: enter image description here

There are a lot of small objects in some areas, and it makes them look darker because of the borders without respect to the thematic color. If the borders are drawn with 30% opacity it results in the following map: enter image description here

This one is obviously better at communicating the data mapped on the objects. However having a static opacity rate can also degrade readability since it makes the objects boundaries less visible, which is a problem if there is only a few big objects. Moreover the change in readibility also depends on the contrast between border and fill colors.

Do automatic ways of finding the good color/opacity for layers exist? What GIS software provide method to properly handle this issue?

8 Answers 8


You can have a different approach for that problem.
1)from line width: line width units=map units.
2)map scale rules: close maps=thick lines, far maps=thin lines.

In QGIS you can do both.

enter image description here


My favorite effect for readability/aesthetics is a "gradient fill". If you are using ArcGIS software, this effect is fairly simple to implement... Here is a good blog post from ESRI's team at the Mapping Center:

Quick tint bands

  • I like this effect, but just reading the blog-post it feels a little harder on my eyes (perhaps that is due to their color choice). Does anyone else find this?
    – djq
    Mar 22, 2011 at 18:52
  • 1
    I've done a similar version of this effect by buffering the interiors of polygons, coloring the buffer the same as the poly but changing the saturation of the buffer color... I did like that solution better that the blurry images shown on the blog post! Mar 22, 2011 at 19:30
  • 3
    This effect wouldn't work at all for the small scale images in the question. The gradient would would either be unnoticeable or completely fill the smaller polygons.
    – Sean
    Mar 22, 2011 at 19:41

The example you show is actually about the shade of colour as much as opacity. By setting a higher opacity you are changing the output colour to a light grey. Try setting it to a light grey to begin with zero transparency, this will give you more control and have a similar effect.

A simple method of obtaining more granular control of opacity is to simply divide the dataset into separate layers based on the area of the polygon, the perimeter, or a mixture of the two. Then simply set the opacity differently for the different layers. Alternatively, render the thickness of the line based on the area of the polygon.


In ArcMap you can set a reference scale for the Data Frame and on the layer Display Properties check "Scale symbols when a reference scale is set".

Set the reference scale at the largest scale you will use. This will the scale the stroke width as you zoom out.

If that doesn't give the desired results, you can also create copies of the layer to display at various scales. For exmaple, have one layer symbolized for 1:24,000 and set not to show out beyond 1:24,000, another layer at 1:100,000 and set not show out beyond 100,000 or in beyond 24,000, etc. Actual numbers will depend on your data and own design predilections.


If your emphasis is on the fill color, why not just avoid the use of a border for the polygons? That should scale better at small scales.

  • 1
    but then you can't distinguish between adjacent polygons that have the same color
    – neuhausr
    Mar 29, 2011 at 13:51

I'm not convinced by BrianP's 'tint' method - it sounds good but then you can grade the tint only from one polygon giving the map 'sides' that don't actually exist. See the link to see what you think.

I prefer A variation on Pablo's idea: Have borders change opacity as you zoom in. At high level have low opacity, as you zoom in black borders gain opacity.

This can be done in KML for Google Earth using 'regions' functionality.


Map symbol readability threshold for a linear symbol is 0.1mm (according to Saliszczew K.A., Einfuhrung in die Kartographie and many other mapping books).

To improve the polygon borders readability, just try to conform to this threshold. For that, you certainly need to convert this value into pixel size according to the screen device resolution.

(In case you read french, see the middle row: enter image description here )


There is a simple alternative in QGIS to achieve the same result as "Scale symbols when a reference scale is set" in ArcGIS. You just need to define the symbol width in map units rather than in mm.

For example, if you want to set a polyline feature to display as 0.8mm wide on a map at 1:30,000 (with map units of metres) and to scale up or down proportionally to the map scale:

  1. Open the layer properties and chose the Style tab

  2. Change the Unit to 'Map unit'

  3. Calculate what 0.8mm represents in m on a map of 1:30,000 scale: 0.8 / 1000 * 30000 = 24m and insert this value (24) into the Width box.

That's it!

As an alternative method you can leave the Unit as milimeters and then insert the following expression into the 'Data defined override' for the width - accessed by clicking on the expression icon just to the right of the Width box

0.8 * 30000 / @map_scale

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.