I am trying to represent data of numbers of people in different areas of a city. Using graduated size creates different bubbles based on size, but this misrepresents data if the areas are not of the same size. For example, Alexandra township is a small area but has a high number of people, so the bubble is large, but Soweto is another township but the areas are distinct within the township so it only has a series of small bubbles. Even though Soweto has overall a larger number of people, Alexandra looks like it has the most people. See the picture below:

No. of people identified as shown by yellow bubbles

Thus, I want to create one symbol - like a human shape - that represents a constant number (50), so that if Alexandra has 200 people, it is represented as 4 of these symbols, and if different areas in Soweto have 50 each they are shown as 1 human symbol. Is it possible to do this in QGIS without manually creating new points?

  • 1
    I believe this is a proportional symbol map, you may find better luck searching for that rather than heat map. – ed.hank Sep 12 '16 at 14:47
  • 1
    Concerning the proportionality issue, I would create a new column in the attributes table with sizes expressed as percentages. Concerning the symbols issue, I would create different symbols with a different number of human shapes for each one (ie 3 shapes in one symbol, not 3 symbols displayed side by side). Eventually, I would create a rule-based style with classes pointing to the different symbols. – wiltomap Sep 12 '16 at 14:58
  • I changed the title to isotype en.wikipedia.org/wiki/Isotype_(picture_language) – underdark Sep 12 '16 at 15:13

Perhaps a bit late but another, fully automated solution would be using labels to achieve an isotype style:

  1. Pick a Font that contains the symbol desired. In my case it's a '7' representing a camera icon in the font 'Kamera Dings' I downloaded from dafont.com. It should be easy to find a free font that contains a human shape to represent population.
  2. Add a column to your population table containing that character in all rows ('TEXT1')

  3. Label the Layer with an expression using rpad and with the font containing your symbol like shown below:

enter image description here

In your case the expression should look something likerpad('',round("POPULATION"/50),"YOUR_SYMBOL_COLUMN")

  1. This is what the result of my example looks like:enter image description here

One (far from ideal since manual) solution, providing you do not have really a lot of widely diverging populations, would be to create different markers (with the duplicate button), each of them with offsets depending on the population. stack of markers Something with an expression such as:

when toint("Population" / 50) >=5 THEN '8,0'

defined in the offset parameter there: enter image description here You have to adapt the expression for each marker in order to create the appropriate setting. The advantages of this manual solution are:

  • you can specify for each one of the marker a different type or color, since you edit them manually;
  • you can easily stack them.

enter image description here

Although I did not do it here, you can have a central symbol for the location of the city and then use the markers you want on top of the name to indicate the population.

It must be possible to do all that automatically with pygis although I wouldn't know how.

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.