There is one polygon layer with the number of "immigrants" and "emigrants" respectively. I want to visualize those two values together. Diagram with both normalized values is not an option because the place is already occupied with point symbols.

Of course, the output can be achieved by means of the following approach

  1. "immigrants" and "emigrants" are absolute values, therefore the difference between them can be calculated, i.e. delta = "immigrants" - "emigrants"
  2. Decide what is 'negative' and what is 'positive', i.e.

CASE WHEN "delta" > 0 THEN 'positive' WHEN "delta" < 0 THEN 'negative' ELSE 'remains the same' END

In this case, I am considering more "immigrants" versus less "emigrants" as positive'.

  1. Define the appropriate amount of categories and visualize them with Graduated symbols, positive' with green, negative' with red, remains the same' with grey.

Another solution can probably be obtained with half-polygon expression where difference() and $geometry() features are applied. And further, each half polygon visualized with its values accordingly.

However, to go above the typical process I was wondering if it is possible to produce a Bivariate choropleth map a.k.a. Relationship Map in QGIS.

My wish is to visualize both values with two graduated colours simultaneously. Pink stands for "immigrants" and blue stands for "emigrants" accordingly.


How can I adopt this approach in QGIS? Perhaps, someone has already described the workflow of creating a Relationship Map in QGIS?

I know that ESRI's ArcGIS Online has such option, the requisite procedure was described in this article How to Make a Relationship Map in ArcGIS Online.

Moreover, Dr Cynthia Brewer already described the theory of such mapping in online guide Color Scheme Types and Combinations: Overview.


Searching on the Internet did not give me any noticeable inspiration.



What you're looking to seem to be more generally called "Bivariate choropleth map" looking for these term will get you some answer.

For example this one by Joshua Stevens

It's to long to fully resume in this answer but basically you add 3 column to your table, in the first you create a classification for your first variable (for exemple A, B, C, D), you do the same in the second column with your second variable (for exemple 1, 2, 3, 4) and then combine the two in the third column (you'll get 16 value like A1, A2, ... , D4) and use this third column for symbolisation.

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