qgis / QGIS

QGIS is a free, open source, cross platform (lin/win/mac) geographical information system (GIS)
https://qgis.org
GNU General Public License v2.0
10.37k stars 2.98k forks source link

Changing default Graduated Symbology Classification from Equal Intervals to Natural Breaks (Jenks) #30298

Open nickbearman opened 5 years ago

nickbearman commented 5 years ago

Feature description.

Choropleth maps are probably one of the most frequently created outputs in QGIS. When choosing a graduated colour scheme, the default selection is Equal Interval which is not a very good way of classifying data. Natural Breaks (Jenks) is a much better way of representing data in a choropleth map, and I think would make a much better default.

In ESRI's ArcMap, Natural Breaks (Jenks) is the default, and while their software has many limitations, I think they have got it right with this!

I can't find any good references that say Natural Breaks is the best, but I have found this: https://www.ehdp.com/methods/jenks-natural-breaks-1.htm. This is also a great poster https://www.flickr.com/photos/idvsolutions/6691496421/in/photostream/ which shows the limitations of Equal Interval, but not the advantages of Natural Breaks (Jenks). Again, another URL that provides some context http://www.ncgia.ucsb.edu/cctp/units/unit47/html/mas_class.html.

If you would like more background / context, please let me know.

I am not sure where the change for this would be, but I guess it might be here: src/gui/symbology/qgsgraduatedsymbolrendererwidget.h

I couldn't find any previous references to this - apologies if I have missed them!

Best wishes Nick.

Additional context

rduivenvoorde commented 5 years ago

FYI: @3nids is going to do work in this area, see: https://github.com/qgis/QGIS-Enhancement-Proposals/issues/147

nickbearman commented 5 years ago

Thanks @rduivenvoorde I will add a note to there.

m-kuhn commented 5 years ago

See https://github.com/qgis/QGIS/pull/30322 Jenks is slower and currently the UX is pretty bad on large layers. @3nids can you give a feedback what would be required to get this integrated in your project (not sure if you planned to have the classification run in a background thread or other ideas).

kgjenkins commented 1 year ago

Perhaps ckmeans could be a faster replacement for jenks? According to https://observablehq.com/@visionscarto/natural-breaks "ckmeans leads (most of the time) exactly to the same solution as Fisher-Jenks’, and easily scales to dozens of millions of values." ckmeans has a time complexity of O(k n log n) compared to jenks' O(k n^2)