Every module follows the same shape: the planning question the tool answers, what it does, the exact clicks or Processing parameters, the real output, how to interpret it, and what breaks.
Data provenance
Thematic source: mahalle_population_2024.geojson (İzmir mahalle polygons, population 2024)
Raster source: kadifekale_dem_copernicus30m.tif (Copernicus DEM 30 m)
Flow source: tire_mahalle_upi_sosyoekonomik.gpkg (assembly areas + critical assets)
DEM reprojected from EPSG:4326 to EPSG:32635 (the ridge engine needs map units)
OD table: 900 real origin→critical-asset pairs (distance-decay gravity on real capacities)
Getting started
The dashboard — one studio, three workspaces
Where do I even start?
Everything in 02CartoLab is reachable from one window. The left rail switches between three workspaces: the Symbology Studio (Quick Style, 2.5D Buildings, Thematic Maps, Palette & Accessibility), the Layout Studio (Template Gallery, Map Sheet Studio, Grid + QPT Studio, 3D Isometric Stacker) and the Processing Hub, which lists every algorithm with a Run button. A collapsible drawer at the bottom holds system diagnostics and the run log.
Step by step
Open the studio from Plugins ▸ 02CartoLab ▸ 02CartoLab Studio.
The status chip in the header reports the plugin's own health; it reads ALL READY when every subsystem is available.
Use the left rail to move between the Symbology Studio, the Layout Studio and the Processing Hub.
Expand Diagnostics & Run Log at the bottom to see what each operation actually did — this is the first place to look when something does not happen.
The Processing Hub doubles as documentation: every algorithm lists its own parameters and help text.
The result
Symbology Studio · Quick StyleSymbology Studio · 2.5D BuildingsSymbology Studio · Thematic MapsSymbology Studio · Palette & AccessibilityLayout Studio · Template GalleryLayout Studio · Map Sheet StudioLayout Studio · Grid + QPT StudioLayout Studio · 3D Isometric StackerProcessing Hub
Read the output. The dashboard is not a separate application from the Processing Toolbox — the same engines are exposed in both places. Use the dashboard for interactive, see-the-result work; use the Processing Hub (or the Model Builder) for anything that has to repeat, be scripted or run in a batch.
When it goes wrong
The window opens but stays empty — the plugin may still be loading; give it a moment and re-open.
A layer does not appear in the combos — the layer must be in the project, not merely visible in the canvas.
Nothing happens on Apply — open Diagnostics & Run Log; the reason is written there.
Symbology Studio
Quick Style — one-click thematic styling
How dense is İzmir, and can I publish that map without opening the symbology panel?
Quick Style turns any vector layer into a publication-ready choropleth or categorical map in a single action. Numeric fields are classified automatically, text fields become categories, and the colour palette comes from the plugin's own library (ColorBrewer plus the colour-blind-safe scientific ramps).
Step by step
Open the 02CartoLab Studio from Plugins ▸ 02CartoLab ▸ 02CartoLab Studio and switch to the Symbology Studio workspace.
In the Quick Style panel choose Layer: the İzmir district layer and Field: pop_density.
Set Style as: Graduated (numeric), Classes: 5 and Break method: Geometric interval — the right choice for the long-tailed density distribution of a real city.
Pick Palette: Viridis (sequential, colour-blind safe) and leave the white outline ticked.
Press Apply Quick Style. The layer in the canvas is restyled immediately.
Export the result with Export QML Style to reuse the exact symbology in another project.
The result
Quick Style
Read the output. The classes are equal-area in colour space but not in count. Compare the two ends of the ramp: with a geometric interval the darkest band covers the sprawling outer districts, the brightest band the compact central ones. Always read the legend, never the colour alone.
Parameters
Parameter
Description
Type
Default
INPUT
Vector layer
Vector layer
—
FIELD
Field to style
Field
—
MODE
Style as
Auto (detect field type) · Graduated (numeric) · Categorized (unique values)
INPUT = İzmir mahalle (2024)
FIELD = pop_density
MODE = 1
CLASSES = 5
METHOD = 2
PALETTE = 15
REVERSE = False
OUTLINE = True
MONOCHROME = False
When it goes wrong
The field list is empty — the layer has no numeric field, or the layer is not yet in the project.
The map looks flat — the field is a rate that is almost constant; check the attribute table for NULLs before classifying.
The style disappears on save — Quick Style styles the layer in place; save the layer as GeoPackage to keep the symbology.
Processing ID: zero2cartolab:quick_style
Symbology Studio
Monochrome print — photocopy-safe symbology
My journal prints in greyscale and photocopies the figure. Will the map still be readable?
With Monochrome print enabled, Quick Style replaces the colour ramp with black-and-white hatch and dot patterns that darken with the value. The legend keeps the numbers, so no information is lost when the figure is printed, photocopied or faxed.
Step by step
Repeat the Quick Style workflow with the same layer, field and break method.
Tick Monochrome print instead of choosing a colour palette.
Apply the style and inspect the legend: each class now carries a distinct pattern, not just a shade of grey.
Export the QML style so every figure in the manuscript uses the same pattern language.
The result
Quick Style — Monochrome Print
Read the output. Pattern density is the value channel. Light diagonal hatching = low, solid black = high. Check the darkest pattern against the smallest class: if two adjacent classes use patterns that read the same at final print size, reduce the number of classes.
Parameters
Parameter
Description
Type
Default
INPUT
Vector layer
Vector layer
—
FIELD
Field to style
Field
—
MODE
Style as
Auto (detect field type) · Graduated (numeric) · Categorized (unique values)
INPUT = İzmir mahalle (2024)
FIELD = pop_density
MODE = 1
CLASSES = 5
METHOD = 2
PALETTE = 21
REVERSE = False
OUTLINE = True
MONOCHROME = True
When it goes wrong
Patterns look identical in the legend — reduce Classes from 5 to 4 or 3.
The layer renders black everywhere — the fill colour of the base symbol is black; switch the symbol fill to white before applying monochrome.
Processing ID: zero2cartolab:quick_style
Symbology Studio
2.5D building styling — extrusion that survives
Can I show Kadifekale's building massing as a real 3D-style extrusion instead of a pasted QML hack?
The 2.5D engine applies a native QGIS 25d renderer driven by a height or floor-count field. It writes the rule as a reusable expression, so the style can be re-applied to any layer with the same field, and it can be exported as a legend-friendly QML where each floor band is its own QGIS legend rule.
Step by step
In the Symbology Studio open the 2.5D Buildings panel.
Choose the layer and set Height field: height_m. If your data stores floors instead, set Height source: Floor count field and Floor height: 3.5 m.
Pick a material preset — Warm Civic, Cool Slate, Urban Core Gold and eight more.
Set Angle (45° is a good default), Height scale, and MAX_HEIGHT to clamp outliers.
Enable Shadow and Wall shading so the massing reads as volume rather than flat colour.
Apply the native 2.5D renderer, or switch Render mode to Per-floor colour bands to get one legend rule per storey.
Export the QML style for reuse.
The result
2.5D Building Styling
Read the output. Compare the flat input with the result: the extrusion turns Kadifekale's street wall into a legible massing model. MAX_HEIGHT is the single most important control — without it one 300 m tower flattens every other building in the frame. Shadows only read if the building is big enough on screen: zoom in, don't shout.
Parameters
Parameter
Description
Type
Default
INPUT
Polygon layer
Vector layer
—
HEIGHT_FIELD
Height field
Field
—
HEIGHT_MODE
Height source
Height field is already in metres/map units · Floor count field (floors x floor height)
Enumeration
Height field is already in metres/map units
FLOOR_HEIGHT
Floor height, used only when height source is floor count
Nothing extrudes — the height field is text, or contains NULLs; the expression uses coalesce() so NULL becomes 0.
The map is all roof colour — Wall shading is off, so no wall faces are drawn.
Floors are wrong — the floor height does not match your data; 3.5 m is the Turkish residential norm, offices are often 3.6–4.0 m.
Processing ID: zero2cartolab:building_25d_style
Symbology Studio
Palette & Accessibility — CVD simulation and WCAG scoring
Will my map still be readable for a reader with deuteranopia, and does it pass the journal's contrast rule?
The Palette & Accessibility inspector lists every ramp in the plugin's library with live swatches, a five-mode colour-vision-deficiency simulation (normal, deuteranopia, protanopia, tritanopia, achromatopsia) and a WCAG 2.1 contrast score for each palette against the page.
Step by step
Open Symbology Studio ▸ Palette & Accessibility and choose the layer you are styling.
Filter Palette type: Sequential, Diverging or Qualitative, and tick Colour-blind safe only to see only the verified ramps.
Select a palette and read the score line: it reports the palette family, the colour-blind safety badge and the WCAG contrast ratio.
Use the CVD simulation strip to preview the same ramp under each deficiency mode.
For a two-variable map, check that the two axes remain distinguishable in every mode, not just in normal vision.
The result
Symbology Studio · Palette & Accessibility
Read the output. A palette is colour-blind safe when the ramp keeps a lightness gradient as well as a hue gradient. A hue-only ramp collapses into indistinguishable bands under deuteranopia — the simulation strip makes that collapse visible before publication, not after review.
When it goes wrong
The contrast ratio looks low — a pale ramp on white paper fails WCAG for small text; darken the ramp or add a frame.
No palette appears — the filter is too restrictive; clear 'Colour-blind safe only' first.
Data Preparation
Normalization & rates — map the rate, not the count
Raw population just redraws the city footprint. How do I map dependency instead?
A choropleth of raw totals mostly shows where the city is built. This algorithm turns any field into a comparable rate: ratio per denominator, z-score, robust z-score (median/MAD), min-max, percentile rank, log, location quotient, winsorized min-max, decile rank, Tukey hinge rank, logistic, power and quantile-uniform scaling. The result is written as a new field and styled automatically.
Step by step
Open Processing Toolbox ▸ 02CartoLab ▸ Choropleth Normalization & Rates.
Set Input to the district layer, Field to pop_total and Method to Rate (numerator / denominator).
Choose Denominator: pop_15_64 — the working-age population — and Scale: 1000 for residents per 1 000 working-age people.
Pick a sequential palette and 5 classes, then Run.
Open the output attribute table: the new field holds the rate, and the layer already carries the matching graduated renderer.
The result
Choropleth Normalization & Rates
Read the output. A value above 1 means the neighbourhood depends on people outside its own working-age group. Values below 1 mean it has a demographic surplus. The rate is the map; the count is only context.
INPUT = İzmir mahalle (2024)
FIELD = pop_total
METHOD = 0
DENOMINATOR = pop_15_64
SCALE = 1000.0
PALETTE = 15
CLASSES = 5
When it goes wrong
The result is empty — the denominator field contains NULLs or zeros.
The scale looks odd — logarithmic and quantile methods are for heavy-tailed data; try Rate or Z-score for a linear variable.
NULL values are counted as zero — normalize first, then filter NULLs in the attribute table.
Processing ID: zero2cartolab:normalize_field
Classification Engine
Adaptive classification — GIC, Jenks, Head/Tail
How many classes does a skewed urban indicator actually need, and which break method fits it?
The classification engine implements seven break methods: Adaptive Geometric Interval (GIC), Head/Tail Breaks, Fisher-Jenks, standard deviation, Tukey box plot, maximum breaks and pretty round breaks. The output layer carries the class field and the matching renderer, so it drops straight into a layout.
Step by step
Open Processing Toolbox ▸ 02CartoLab ▸ Advanced Classification.
Set Input to the district layer, Field to pop_density and Classes to 5.
Choose Method: Adaptive Geometric Interval (GIC) — it follows the shape of a long-tailed distribution instead of forcing equal counts.
Pick a palette and Run.
Compare the result with Fisher-Jenks: run the algorithm again with METHOD = Fisher-Jenks and compare the class limits.
The result
Adaptive Classification (GIC / Jenks / Head-Tail)
Read the output. GIC produces ordered, readable intervals that follow the data's own spread; Jenks minimises within-class variance at the cost of irregular limits. If the two maps look the same, the distribution is not skewed enough for the choice to matter — and that is a useful result too.
Parameters
Parameter
Description
Type
Default
INPUT
Input layer
Input layer
—
FIELD
Field to classify
Field
—
CLASSES
Number of classes
Number
5
METHOD
Classification method
Adaptive Geometric Interval (GIC) · Head/Tail Breaks · Fisher-Jenks Natural Breaks · Standard Deviation · Box Plot / Tukey Breaks · Maximum Distribution Breaks · Pretty Nice-Round Breaks
Bivariate choropleth — two variables, one honest map
Which İzmir neighbourhoods are both old and full of children — the ones that need care and schools at once?
A bivariate choropleth classifies two numeric variables into an N×N matrix and colours every polygon by the combination of its two class bands. The output carries a bivar_class field and a categorized renderer, and the plugin can export the matching legend matrix as vector geometry.
Step by step
Open Processing Toolbox ▸ 02CartoLab ▸ Bivariate Choropleth Map.
Set Input to the district layer. FIELD_X: elderly_share (share aged 65+), FIELD_Y: child_share (share aged 0–14).
Set CLASSES: 3 for a 3×3 matrix, METHOD: Quantile (Equal Count).
Choose PALETTE_PRESET: Blue - Orange (Density & Economy) — or pick Custom Corner Colours to control all four corners.
Run. The output is styled automatically with a categorized renderer on bivar_class.
Run Export Bivariate 2D Legend Matrix with the same settings to obtain the diamond or square legend.
The result
Bivariate Choropleth
Read the output. Read the matrix as two axes at once. The upper-right cell — high on both axes — is the hardest quadrant: an old population needing care and a young population needing schools in the same neighbourhoods. The legend is not decoration; without the axis labels the colours are meaningless.
Only one colour appears — one of the fields has almost no variance; check the attribute table.
The corners look swapped — verify the palette preset is not the Custom one with the corner colours mixed up (LOW-LOW, LOW-HIGH, HIGH-LOW, HIGH-HIGH).
The map is unreadable — reduce CLASSES to 2 or pick a higher-contrast preset.
Processing ID: zero2cartolab:bivariate_choropleth
Thematic Mapping
Bivariate legend matrix — export the key, not the picture
How do I get a publication-ready bivariate legend into my manuscript without redrawing it?
This algorithm writes the N×N colour matrix as a standalone vector polygon layer plus an HTML preview. Use DIAMOND for the classic bivariate diamond key, or squares. The geometry can be dropped straight into a print layout as a legend item.
Set CLASSES: 3 and choose the same PALETTE_PRESET as the map.
Tick DIAMOND for a diamond key; leave CELL_SIZE at 30 mm for a print layout, or lower it for a slide.
Set LABEL_X and LABEL_Y to the exact variable names used in the map caption.
Run and choose the output location. The layer carries the matrix; OUTPUT_HTML gives a browser-ready preview.
The result
Bivariate 2D Legend Matrix
Read the output. The matrix is the legend of a bivariate map. If the labels in the matrix do not match the caption, the reader cannot decode the map. Generate the matrix from the same preset and class count as the map, every single time.
Parameters
Parameter
Description
Type
Default
CLASSES
Number of classes per axis (N x N)
Number
3
PALETTE_PRESET
Colour Palette Preset
Teal - Brown (Environment & Resilience) · Stevens Pink - Cyan (Demographics & Social) · Blue - Orange (Density & Economy) · Purple - Green (Land Use & Canopy) · Night Neon (Dark Theme Visuals) · Custom Corner Colours
Value-by-Alpha — fade the uncertain, don't hide it
My estimate is unreliable in some neighbourhoods. How do I show that without pretending the data is missing?
Value-by-Alpha separates the thematic variable from the reliability variable: hue carries the value, opacity carries the confidence. Low-confidence features fade instead of disappearing into a 'no data' colour — the map states its own uncertainty.
Step by step
Open Processing Toolbox ▸ 02CartoLab ▸ Value-by-Alpha (VbA) Map.
Set FIELD_COLOUR to pop_density — the value you want the reader to see.
Set FIELD_ALPHA to working_share — the share of the working-age population, used here as the reliability proxy.
Set ALPHA_MIN: 64 and ALPHA_MAX: 255. Both are integers on a 0–255 opacity scale, where 0 is invisible and 255 fully opaque: 64 means the least reliable areas stay 25 % visible, 255 means the most reliable are solid.
Choose a CVD-safe palette (Cividis) and 5 classes, then Run.
Compare with the plain choropleth: the faded areas are exactly the places where the estimate should not be trusted.
The result
Value-by-Alpha
Read the output. A faded polygon is not missing data — it is uncertain data. That distinction is the entire point: a normal choropleth hides uncertainty behind a single grey, which reads as 'nothing here'. Keep the caption explicit about what the alpha variable means, or the reader will not know.
The map comes out blank — ALPHA_MIN/MAX are integers on a 0–255 scale. Typing 0.25 and 1.0 is silently truncated to 0 and 1, which renders everything invisible. Use 64 and 255.
Everything is faded — the alpha field is inverted or has a tiny range; check the field statistics.
The map looks like a plain choropleth — ALPHA_MIN is too close to ALPHA_MAX.
Processing ID: zero2cartolab:value_by_alpha
Thematic Mapping
Ridge map — turn any raster into relief
Can I show Kadifekale's terrain — or any continuous surface — as a ridge-line map instead of a flat hillshade?
The ridge engine samples a raster along parallel scanlines and draws each scanline as a profile, producing the stacked ridgelines of a Joy-Division chart. The source can be a DEM, a heat surface, a density raster or an accessibility index.
Step by step
Reproject the raster to a projected CRS first — Raster ▸ Reproject Project Layer, or Processing ▸ GDAL ▸ Reproject. The ridge engine multiplies the raw elevation by the vertical exaggeration and adds it to the scanline position, so a DEM in degrees would throw the ridges thousands of degrees away. The plugin refuses a geographic CRS with an explanatory error.
Open Processing Toolbox ▸ 02CartoLab ▸ Ridge Map.
Set RASTER to the reprojected DEM and EXTENT to the area you want, in the DEM's own CRS (xmin,xmax,ymin,ymax).
VERTICAL_SCALE is the exaggeration of the raw elevation. Derive it from the data: (map height × 0.3) ÷ maximum elevation makes the tallest ridge rise about a third of the frame. Change it and compare — too little flattens the relief, too much turns it into a cartoon.
Set LINE_COLOR near-black, LINE_WIDTH: 0.28 and Run. The output is vector, so it can be styled and labelled in a layout.
The result
Ridge Map (Joy Division)
Read the output. The horizontal axis is distance, the vertical axis is the surface value. Dark ridges are high ground. Change VERTICAL_SCALE and watch the terrain change character — too little and it flattens, too much and it becomes a cartoon. The right value is the one that reveals structure without inventing it.
The plugin refuses the input — the raster is in a geographic CRS (EPSG:4326). Reproject it to UTM; the error message says so explicitly.
The ridges collapse into a single vertical line — the same cause, or the vertical exaggeration was applied to degree values.
The ridges are flat lines — VERTICAL_SCALE is too low for the elevation range.
The ridges are noisy — raise SMOOTH.
Processing ID: zero2cartolab:ridge_map
Thematic Mapping
Dot-density map — one dot, N people
Where do people actually live inside these neighbourhoods, instead of just how many?
The dot-density engine seeds dots inside each polygon — one dot per N units of a count field — placing them away from edges and never inside holes. The same seed always produces the same map, so figures are reproducible across a report.
Step by step
Open Processing Toolbox ▸ 02CartoLab ▸ Dot-Density Map.
Set INPUT to the district layer and FIELD to pop_total.
Set VALUE_PER_DOT: 500 — one dot per 500 residents.
Choose DOT_SIZE: 2.0 mm, DOT_COLOR and a SEED (42 is a good reproducible default).
Run and compare with the choropleth of the same variable: the dots show where the density is, not just how much.
The result
Dot-Density Map
Read the output. The dot pattern carries spatial information the choropleth loses: it shows that a dense district is dense in one compact core rather than spread evenly. Never change the seed between figures of the same dataset — the same data must produce the same picture.
Parameters
Parameter
Description
Type
Default
INPUT
Input polygon layer
Input layer
—
FIELD
Count field
Field
—
VALUE_PER_DOT
Value represented by one dot
Number
100.0
DOT_SIZE
Dot marker size (mm)
Number
1.0
DOT_COLOR
Dot marker color
Colour
—
SEED
Random seed
Number
42
OUTPUT
Dot-density output
Output layer
—
Exact run used for the screenshots
INPUT = İzmir mahalle (2024)
FIELD = pop_total
VALUE_PER_DOT = 500.0
DOT_SIZE = 2.0
DOT_COLOR = #7c3aed
SEED = 42
When it goes wrong
Too many dots — raise VALUE_PER_DOT (fewer dots, same meaning).
The dots overflow the polygon — the count exceeds the area; this is a data problem, not a rendering one.
The map differs between runs — the seed was changed.
Our values live at points, not polygons. How do I size the symbols so the reader's eye is not misled?
The proportional-symbol engine builds graduated point symbols with Flannery compensation: because people systematically under-estimate area differences, the symbol areas are scaled so that perceived size matches actual value. Symbols come in five shapes and the legend carries the nested values.
Step by step
Open Processing Toolbox ▸ 02CartoLab ▸ Proportional Symbols (Flannery).
Set INPUT to a point layer — here the interior points of the district layer, each carrying pop_total.
Set FIELD: pop_total, MAX_SIZE: 14.0 and MIN_SIZE: 2.0 (millimetres at layout scale).
Choose SHAPE: Circle for area, Square or Diamond when the figure is printed in black and white.
Leave FLANNERY ticked, set the fill and outline colours, then Run.
Place the result in a layout: the legend is generated with the nested sample values.
The result
Proportional Symbols (Flannery)
Read the output. The area of the symbol, not its radius, carries the value. Flannery compensation corrects the well-documented human bias that makes a circle that looks twice as big actually read as much more than double. Turn it off and the map quietly lies by about a third.
Parameters
Parameter
Description
Type
Default
INPUT
Input layer
Input layer
—
FIELD
Magnitude field
Field
—
MAX_SIZE
Maximum symbol size (mm)
Number
16.0
MIN_SIZE
Minimum symbol size (mm)
Number
2.0
SHAPE
Symbol shape
Circle · Square · Diamond · Triangle · Star
Enumeration
Circle
FILL_COLOR
Symbol fill color
Colour
—
OUTLINE_COLOR
Symbol outline color
Colour
—
FLANNERY
Apply Flannery perceptual compensation
Boolean
True
OUTPUT
Proportional symbols output
Output layer
—
Exact run used for the screenshots
INPUT = İzmir mahalle noktaları
FIELD = pop_total
MAX_SIZE = 14.0
MIN_SIZE = 2.0
SHAPE = 0
FILL_COLOR = #e38e4f
OUTLINE_COLOR = #7c2d12
FLANNERY = True
When it goes wrong
The symbols are too big and cover the map — reduce MAX_SIZE.
Small values are invisible — raise MIN_SIZE, or filter the input to the top N.
The legend shows no values — the output layer must be added to the layout's legend.
Processing ID: zero2cartolab:proportional_symbols
Thematic Mapping
Origin–Destination flow map — curved desire lines
How do people or goods move between places, and in which direction?
The flow engine converts an origin–destination table into curved, arrowed desire lines on the map. Width is proportional to volume, large flows are drawn first so small ones stay visible, and A→B and B→A are kept apart so a return trip never hides under the outward one.
Step by step
Prepare a ZONES layer (polygons or points) with a unique id field, and an OD table with three fields: origin, destination and volume. The data/od_table.csv shipped with this guide is a working example.
Open Processing Toolbox ▸ 02CartoLab ▸ Origin-Destination Flow Map.
Set ZONES and ZONE_ID, then FLOWS with the ORIGIN, DEST and VOLUME field names.
Tick DIRECTED to keep the arrowheads and separate opposite directions; set MIN_VOLUME to drop the noise, and TOP_N to keep only the strongest links.
Tune CURVATURE (0.3 is a good default), MAX_WIDTH / MIN_WIDTH, and END_GAP so the line starts clear of the anchor.
Run. The output is graduated by volume and drawn with large flows underneath.
The result
Origin-Destination Flow Map
Read the output. The line width is the volume, the curvature is purely graphic, and the arrowhead is the direction. Read the map as a network of desire lines, not as a road map: crossing lines mean competing routes, not intersections. If a return flow is invisible, DIRECTED was probably off.
Parameters
Parameter
Description
Type
Default
ZONES
Zones layer
Input layer
—
ZONE_ID
Zone id field
Field
—
FLOWS
Origin-destination table
Input layer
—
ORIGIN
Origin id field
Field
—
DEST
Destination id field
Field
—
VOLUME
Volume field
Field
—
DIRECTED
Keep directions separate (A→B and B→A)
Boolean
True
MIN_VOLUME
Minimum volume to draw
Number
TOP_N
Keep only the N largest flows (0 = all)
Number
CURVATURE
Curvature (0 = straight lines)
Number
0.2
MAX_WIDTH
Maximum line width (mm)
Number
5.0
MIN_WIDTH
Minimum line width (mm)
Number
0.3
END_GAP
Gap at each end (% of flow length)
Number
4.0
ARROWS
Draw arrowheads
Boolean
True
PALETTE
Colour ramp
YlOrRd · Blues · Viridis · Plasma · Magma · Purples · Greys
Enumeration
YlOrRd
OUTPUT
Flow lines
Output layer
—
Exact run used for the screenshots
ZONES = OD zones
ZONE_ID = zone_id
FLOWS = OD table
ORIGIN = origin_id
DEST = dest_id
VOLUME = flow_vol
DIRECTED = True
MIN_VOLUME = 5.0
TOP_N = 0
CURVATURE = 0.32
MAX_WIDTH = 4.0
MIN_WIDTH = 0.25
END_GAP = 6.0
ARROWS = True
PALETTE = 0
When it goes wrong
No lines appear — the origin/destination ids in the table do not match the ZONE_ID values; the algorithm warns about unmatched ids.
All lines are the same width — VOLUME points to a text field or a constant.
Lines start inside the anchor — raise END_GAP.
Processing ID: zero2cartolab:flow_map
Cartogram Engine
Continuous-area cartogram — reshape by value
Where does İzmir's population really live, if the map is drawn so that area means people?
The cartogram engine continuously distorts every polygon so that its area is proportional to the chosen value, while shared borders stay contiguous and neighbourhoods stay neighbours. The result is a topology-preserving map in which geography is truthful but area carries the message.
Step by step
Open Processing Toolbox ▸ 02CartoLab ▸ Continuous-Area Cartogram (Diffusion).
Set INPUT to a projected polygon layer — the engine measures areas in map units, so a geographic CRS is rejected. Use the district layer in EPSG:32635.
Set FIELD: pop_total.
MAX_ITERATIONS: 60 and MAX_ERROR: 5 (average area error in percent) control how long the diffusion runs.
Choose PALETTE: Viridis and Run.
Read the two outputs: ITERATIONS (rounds used) and RESIDUAL_ERROR (how far the areas still are from the target).
The result
Continuous-Area Cartogram
Read the output. Compare the input and the result: the mountainous eastern districts shrink towards nothing because few people live there, while the compact central districts swell. The cartogram keeps the adjacency structure, so a district never floats away from its neighbours — that is what makes it readable where a Dorling cartogram is not.
The engine refuses the input — the CRS is geographic; reproject to a projected CRS first.
The result is scrambled — the value field has zeros or extreme outliers; clean the field and rerun.
The shapes did not change enough — raise MAX_ITERATIONS and lower MAX_ERROR.
Processing ID: zero2cartolab:compute_cartogram
Cartogram Engine
Dorling cartogram — circles that keep their place
Can I show totals without destroying the shape of the geography?
A Dorling cartogram replaces every polygon with a circle whose area is proportional to the value, positioned close to its original location by a force-directed relaxation. Districts with large values and small footprints stay visible instead of being squeezed out.
Step by step
Open Processing Toolbox ▸ 02CartoLab ▸ Dorling Circle Cartogram.
Set INPUT to the district layer and FIELD: pop_total.
SIZE_FACTOR scales the circles; ATTRACTION (0.6) pulls them back to their home position; GAP (3.0) keeps circles from touching.
ITERATIONS: 300 gives the relaxation time to settle.
Choose PALETTE: Viridis and Run.
Read the ROUNDS and RESIDUAL outputs to check how close the layout settled.
The result
Dorling Circle Cartogram
Read the output. Use Dorling when the shape of the unit carries information — a coastline, a river, a border — and you still need to show totals. Use the continuous cartogram when the shape itself is the message. A Dorling circle says 'this much population, roughly here'; a distorted polygon says 'this much population, and this is what the land looks like under that pressure'.
Parameters
Parameter
Description
Type
Default
INPUT
Areal units (polygons)
Input layer
—
FIELD
Value field
Field
—
SIZE_FACTOR
Size factor (total circle area / layer area)
Number
0.5
ATTRACTION
Attraction toward home position (0-1)
Number
0.1
GAP
Gap between circles (layer units)
Number
ITERATIONS
Settling iterations
Number
150
PALETTE
Colour ramp
Viridis · YlGnBu · YlOrRd · Plasma · Magma · Blues · Purples
Enumeration
Viridis
OUTPUT
Dorling cartogram
Output layer
—
Exact run used for the screenshots
INPUT = İzmir ilçeleri
FIELD = pop_total
SIZE_FACTOR = 1.0
ATTRACTION = 0.6
GAP = 3.0
ITERATIONS = 300
PALETTE = 0
ROUNDS = 316
RESIDUAL = 0.00242618183044963
When it goes wrong
Circles overlap — raise GAP.
Circles drift far from their origin — lower ATTRACTION.
Circles are invisible — the values are too small relative to SIZE_FACTOR; raise it.
Processing ID: zero2cartolab:dorling_cartogram
Aggregation
Hexbin aggregation — density without overplotting
Too many points, too little map. How do I aggregate them honestly?
The hexbin engine bins a point layer into a pointy-top hexagonal grid and aggregates a weight per cell — count, sum or mean. Hexagons tile the plane with no gaps, which keeps the density surface continuous while removing the overplotting that hides real structure.
Step by step
Open Processing Toolbox ▸ 02CartoLab ▸ Hexbin Aggregation.
Set INPUT to a point layer — the interior points of the district layer, each carrying pop_total.
Set CELL_SIZE: 1500 (hexagon edge in map units — the mesh size of your analysis) and WEIGHT: pop_total.
Choose STAT: Sum of weight to accumulate population per cell, or Mean of weight for an average.
Choose CLASSIFIER: Quantile and CLASSES: 5, then a palette, and Run.
The output carries hex_count, hex_sum and hex_mean so you can re-classify without recomputing.
The result
Hexbin Aggregation
Read the output. A hexagonal mesh removes the false precision of small administrative units: the map shows a smooth surface rather than a patchwork of arbitrary boundaries. Choose the cell size from your question — 1.5 km cells answer neighbourhood questions, 500 m cells answer street-level ones.
INPUT = İzmir mahalle noktaları
CELL_SIZE = 1500.0
WEIGHT = pop_total
STAT = 1
PALETTE = 5
CLASSIFIER = 0
CLASSES = 5
When it goes wrong
The output is empty — CELL_SIZE is larger than the data extent.
Only a few cells are filled — the point layer is sparse relative to the cell size.
The surface looks blocky — switch CLASSIFIER to Natural Breaks (Jenks) for a skewed distribution.
Processing ID: zero2cartolab:hexbin_aggregate
Labeling
Visual-centre label points — labels that stay inside the shape
Why do my district names keep falling off the districts?
Centroid labels drift outside concave shapes. The label-point engine computes the pole of inaccessibility for every polygon — the point furthest from the polygon edge, which is guaranteed to lie inside — and writes it as a new point layer you can join to your label layer.
Step by step
Open Processing Toolbox ▸ 02CartoLab ▸ Visual-Center Label Points.
Set INPUT to the polygon layer and PRECISION: 1.0 (the search tolerance in map units; lower is finer).
Run. The output is a point layer with one anchor per polygon.
Join the anchor layer to your label layer on the polygon id.
In the label layer set the anchor mode to the joined point, and add a callout line for the labels that would still overlap.
The result
Visual-Center Label Points
Read the output. The anchor is the visually strongest position inside the shape — the same principle that puts a logo in the optical centre of a triangle. For long, thin or crescent-shaped districts it is the difference between a legible label and one that hangs in the sea.
Parameters
Parameter
Description
Type
Default
INPUT
Input polygon layer
Input layer
—
PRECISION
Precision (map units, 0 = auto)
Number
OUTPUT
Label points output
Output layer
—
Exact run used for the screenshots
INPUT = İzmir mahalle (2024)
PRECISION = 1.0
When it goes wrong
Anchors are not exactly inside — increase PRECISION (coarser search) or fix the geometry with Fix geometries.
Labels still collide — the anchor solves containment, not collision; use the callout line or the plugin's label placement settings.
The result is empty for some polygons — the geometry is invalid; run Fix geometries first.
Processing ID: zero2cartolab:label_points
Map Reference
Graticule — a labelled reference grid
My reader needs to locate a point on the map. What reference grid should I add?
The graticule engine draws meridians and parallels on a round interval and attaches a coordinate label to every line. It is the cheapest way to make a thematic map locatable and citable.
Step by step
Open Processing Toolbox ▸ 02CartoLab ▸ Graticule / Reference Grid.
Set EXTENT to the map area in the layer's CRS, for example 500000,650000,4050000,4120000 [EPSG:32635].
Set X_INTERVAL and Y_INTERVAL: 10000 for a 10 km metric grid, or 1 for a 1° geographic grid.
Choose LINE_STYLE: Dashed Line for a quiet reference, LINE_COLOR: grey and LINE_WIDTH: 0.35.
Run and add the result below the data layers.
For a survey-style neatline, use the Layout Studio's Grid + QPT Studio presets instead.
The result
Graticule / Reference Grid
Read the output. A graticule is a reference layer: it always sits beneath the data and never competes with it. In the metric UTM grid the numbers are eastings and northings, which let a reader convert a visual position into a coordinate. In a geographic grid they are degrees, which lets them locate the place by name.
Parameters
Parameter
Description
Type
Default
EXTENT
Grid extent
Extent
—
X_INTERVAL
Vertical line (meridian) interval, 0 = auto
Number
Y_INTERVAL
Horizontal line (parallel) interval, 0 = auto
Number
LINE_STYLE
Grid line style
Solid Line · Dashed Line · Dotted Line · Dash-Dot Line
The grid does not appear — EXTENT and the interval are mismatched; check the extent format and CRS.
Too many lines — increase the interval.
The grid dominates the map — reduce the width and use a light grey.
Processing ID: zero2cartolab:graticule_grid
Layout Studio
Template gallery — ten publication archetypes
Which print archetype should this deliverable use?
The Layout Studio turns a styled map into a finished page. Ten archetypes are built in: Report Figure (16:9), Academic Journal (A4 two-column), Exhibition Poster (A1/A2), Fact Sheet (A4 portrait), Comparative Diptych, UTM Field Sheet, Planning Review Board, Spatial Data Story, Atlas Production Sheet and Emergency Operations Brief. Each has calibrated margins, a type hierarchy and a grid — not a blank page with a picture on it.
Step by step
Open the Layout Studio from the dashboard and choose the Template Gallery tab.
Pick the archetype that matches the deliverable — the gallery shows each one's page size and purpose.
The template is created in the current project with your layers; refine the title, subtitle and credits.
Add a grid preset from Grid + QPT Studio if the archetype needs a reference frame.
Open the layout in the Print Layout Designer to fine-tune the map frame and legend.
Export from the Layout Manager as PNG, PDF or SVG at 150, 300 or 600 dpi.
The result
Report Figure — 16:9Academic Journal — A4 two-columnExhibition Poster — A2Fact Sheet — A4 portraitComparative DiptychUTM Field SheetPlanning Review BoardSpatial Data StoryAtlas Production SheetEmergency Operations Brief
Read the output. Choose the archetype by the reading distance, not by taste: a Report Figure is read on a laptop, an Academic Journal page is read at 40 cm, an Exhibition Poster is read at 2 m. The templates encode exactly those differences in type size, margin and data density.
When it goes wrong
The template ignores my layer — the layer must be loaded and visible in the project before the template is created.
The legend overflows — reduce the number of classes or the legend font size in the Designer.
The map frame is empty — set the map extent and CRS on the map item after creating the template.
Layout Studio
Auto Map Sheet — a finished layout in one click
I have a styled map and no time. Can I get a complete, credited, scaled print sheet?
Auto Map Sheet builds a finished publication layout from the current view: a titled map frame, a filtered legend, a fitted scale bar, a north arrow, an optional coordinate grid and a credits line — then registers it in the project so you can refine or export it immediately.
Step by step
Style your layers first, then set the canvas extent to the area you want to publish.
Open the Layout Studio ▸ Map Sheet Studio tab.
Choose the page size (A4 landscape is the default) and a typography preset: swiss_modern, academic_serif, technical_blueprint or editorial_warm.
Set the title, subtitle and credits, and decide which furniture to include: title, legend, scale bar, north arrow, coordinate grid, frame.
Build the sheet. It is added to the project's layout manager and opens in the Designer.
Export as PNG, PDF or SVG from the Layout Manager at 150, 300 or 600 dpi.
The result
Auto Map Sheet
Read the output. The scale bar is fitted to the map's real geographic width — geodesic on geographic CRS, unit-aware and space-fitted on projected ones. That is why the sheet never shows a scale bar that is technically correct but visually wrong, or a north arrow pointing at nothing on a projected map.
When it goes wrong
The map frame shows a different area than the canvas — the sheet uses the canvas extent at the moment of building; zoom the canvas first.
The legend overflows the page — fewer classes, or a smaller legend font in the Designer.
No north arrow — it is suppressed automatically where the map rotation makes it meaningless.