[GIS] Circular color map in QGIS

colorcolor rampcolormapqgis

In order to plot azimuth values for example, does anyone know any good circular color map?
By good I mean, visually suited for human color perception.

I didn't find any suited color ramp preset in QGIS.

So I build one, like the following, by taking profit that HSV values are given as angular degrees:

enter image description here

But I wonder if there is some existing known color ramps for this particular purpose.

Useful link on how to set up a personalized color ramp in QGIS:
Color Ramp in QGIS

Other useful links on perceptual colormaps:

Best Answer

Interesting question, and one I've stumbled on myself but not found an answer to.

I haven't found any, not even in the extensive cpt-city catalog.. and ColorBrewer doesn't appear to have any either.

The ramp you describe makes sense to me, because :-

  • opposite angles (180 degrees apart) on the HSV wheel are complementary colours.
  • assuming your azimuths start at 0=north, not 0=east, it also gives a sense of illumination (lighter from the south, darker to the north)
  • the hue ramp shows a continuous line

It works well for me - for example, when using this to colour an aspect raster.

However it doesn't work so well under colour-blindness simulation (QGIS allows you to preview the map as a deuteranope/protanope would). Here's what it looks like in one of the colour-blind modes. West and North, and East and South, are difficult to tell apart so it ends up looking a bit "two tone".

enter image description here

After a bit of trial and error I found a ramp which seems to work fairly well for both normal and colour-blind vision, based on your ramp, but working in RGB. The following .qml file has the details. You may need to edit this for versions older than 2.18.7, but you should be able to work out the ramp settings if you can't get this to load.

enter image description here enter image description here

<!DOCTYPE qgis PUBLIC 'http://mrcc.com/qgis.dtd' 'SYSTEM'>
<qgis version="2.18.7" minimumScale="inf" maximumScale="1e+08" hasScaleBasedVisibilityFlag="0">
  <pipe>
    <rasterrenderer opacity="1" alphaBand="-1" classificationMax="360" classificationMinMaxOrigin="MinMaxFullExtentEstimated" band="1" classificationMin="0" type="singlebandpseudocolor">
      <rasterTransparency/>
      <rastershader>
        <colorrampshader colorRampType="INTERPOLATED" clip="0">
          <item alpha="255" value="0" label="0" color="#2250fe"/>
          <item alpha="255" value="92.3" label="92.3" color="#00a83b"/>
          <item alpha="255" value="181" label="181" color="#fdd248"/>
          <item alpha="255" value="271" label="271" color="#b3507e"/>
          <item alpha="255" value="360" label="360" color="#2250fe"/>
        </colorrampshader>
      </rastershader>
    </rasterrenderer>
    <brightnesscontrast brightness="0" contrast="0"/>
    <huesaturation colorizeGreen="128" colorizeOn="0" colorizeRed="255" colorizeBlue="128" grayscaleMode="0" saturation="0" colorizeStrength="100"/>
    <rasterresampler maxOversampling="2"/>
  </pipe>
  <blendMode>0</blendMode>
</qgis>

This makes the differences more visible for both normal and colour blind views. West and east are still a bit difficult to tell apart, but are more distinct than before.

Caveat: I'm not colour blind so I have no idea how accurate the simulation is :)

Related Question