Every ixMaps theme is described by a single pipe-delimited szFlag string — "type:CHART|PIE|DONUT|3D|VOLUME" — that the rendering engine reads with plain regex tests. This page maps every keyword the engine actually understands, and which shapes each one is allowed to modify.
The very first thing the engine checks in a flag string — this decides what geometry gets drawn. Per the source's own doc comment: "CHOROPLETH type can be changed only to BUBBLE type."
The basic layer type: adds a map's own geographic items to the theme as-is, no classing computed. Commonly paired with a CHOROPLETH fill; its node positions are also what other themes' VECTOR/BEZIER charts connect between.
Point
LineString
MultiLineString
Polygon
MultiPolygon
Sphere
the geometry types it actually draws — plus Sphere, an ixMaps-only extension for orthographic-projection globes. MultiPoint/GeometryCollection are parsed elsewhere but never drawn here.
colorscheme:none
CLIPTOVIEW
type:FEATURE|CHOROPLETH
Polygons filled by class — draws no geometry of its own, so it needs a FEATURE layer to supply the polygons/lines, joined by a shared layer name. Combines directly: type:FEATURE|CHOROPLETH. Classification method is a second-level flag:
EQUIDISTANT
QUANTILE
NATURAL
HEADTAIL
LOG
POW2
POW3
type:CHOROPLETH|EQUIDISTANT;classes:10;overviewchart:PIE|3D
A drawn chart shape per feature, positioned by coordinates straight from the data or by joining to a FEATURE layer's own position (both via lookupfield:). Branches into nine sub-shapes — mapped in full below.
BAR
PIE
BUBBLE
SYMBOL
VECTOR
+4 more ↓
type:CHART|BUBBLE|VALUES
Color answers a different question depending on what the field actually measures. A quantity — a temperature, a percentage, a count — asks "which class does this value fall into" (a classification method). A single quality — one field of categories — just needs one color per distinct value. A quality spread across several fields — an energy source, a political party, any set of categories compared side by side — has no single number to classify at all, so the flag string instead names a method for picking or building the color itself. These read from the same type: string as CHOROPLETH/CHART/FEATURE, which makes them look like siblings — they aren't; they never choose geometry.
One numeric field, cut into N ordered classes — CHOROPLETH's own second-level flag (chips already shown above). Seven interchangeable algorithms, from plain equal-width slicing to breaks that follow the data's own shape.
Seven interchangeable algorithms: equal-width (default), equal-count, natural gaps, heavy-tailed recursion, or equal-width on a transformed scale. HEADTAIL is the odd one out — it ignores classes:N entirely.
EQUIDISTANTQUANTILENATURALHEADTAILLOGPOW2POW3
One qualitative field, no classing computed at all — every distinct value simply gets its own color.
Not a number to classify — a name. Each distinct string value gets its own color, assigned in first-appearance order (or pinned explicitly with a values: list). IGNORECASE folds differently-cased spellings into one category.
values:
IGNORECASE
One category "wins" and lends the item its color — the theme shows which of several fields is locally dominant.
Color driven by whichever field value clears a filter threshold (min / max / mean / median, ± dfilter%). When paired with CHOROPLETH but no CHART, a deviation bar or donut appears only in the tooltip preview.
filter:mean
dfilter:30
Recomputes the DOMINANT relevance metric as a percentage of the field's mean or median, rather than the raw value — makes the threshold comparable across fields with very different scales.
Same idea again, but the relevance metric is a z-score: (value − mean) / stddev.
No single winner — every field contributes to one new blended color at once. This is how bivariate (and tri-/multivariate) choropleth maps get built here.
One color per item, mixed additively (default) or subtractively from several field values at once — like overlaying colored filters. Two fields makes a bivariate choropleth; three or more, a trivariate/multivariate one.
SUBTRACTIVE
type:CHART|…Per-item drawing runs in chartMap(), which fast-paths four shapes directly — DOT, QUAD (single-point primitives) and VECTOR, BEZIER (two-point connectors, needing a second position) — and delegates everything else to drawChart(): BLANK / USER, then PIE → WAFFLE → BUBBLE·SQUARE·LABEL → SYMBOL → BUFFER → BAR·BARS. Dashed-border chips exist only in the UI menu list, with no dedicated code branch.
One card per value, laid out on a shared axis; almost every other modifier in the file exists to bend this axis somehow.
HORZLEFTRIGHTUPCENTERDIAGLEFTDIAGRIGHT
COLUMNPOINTERWIDTHARROWSMALLARROWDOTTEDDTEXT
3DVOLUMESIZESIZELOGTHINTHICKNORMSIZEMENUSIZE
STACKEDSPACEDSORTSEQUENCEMULTICOMPRESSEXPANDCOLUMNS
INVERTNOZERONONEGATIVEONLYNEGATIVEOFFSETMEANOFFSETMEDIANDEVIATION
VALUESAXISZOOM
CHART|BAR|HORZ|LEFT|UP|COMPRESS|3D · CHART|BAR|3D|VOLUME · CHART|BAR|SORT|3D|COLUMNS|STACKED
Radial, segment-per-value. DONUT punches an inner hole; STARBURST turns segments into petals whose length also encodes value.
DONUTTHINXTHINTHICKHALFHALFPLUS10HALFMINUS20
3DVOLUMEHEIGHTSIZESIZELOGNORMSIZEGRIDSIZE
STARBURSTXLFLOWERLFLOWERFLOWERSFLOWERXSFLOWER…RAYS
BOWSBOWXSBOWLBOWXLBOW
SORTREVERSESTACKEDBIGTOTOPNOROTATESYMMETRICPOLARDIRECTION
CENTERCENTERVALUEGLOW
CLASSESCOUNTAUTOCOMPLETE
SILENTNOLINESWHITELINESZOOMVALUES
CHART|PIE|DONUT|3D|VOLUME · CHART|PIE|STARBURST|3D|HEIGHT · CHART|PIE|DONUT|STARBURST|3D|SIZE
One value, one symbol — same sizing engine, three final shapes: a circle, a rect, or a formatted text label. The single-value counterpart to BAR/PIE's multi-value layouts, and a fixed-shape special case of SYMBOL below.
BUBBLESQUARELABELTEXTONLY
GLOWAURA
AUTOSIZENORMSIZEFIXSIZEMENUSIZENOSIZEINVERTSIZERANGESURFACEVOLUME
CATEGORICALCOMPOSECOLORDOMINANTPERCENTOFMEANDEVIATION
NOLINESOUTLINEMORPHCLIPZEROISVALUE
CHART|BUBBLE|VALUES · CHART|SQUARE|VALUES · CHART|BUBBLE|CATEGORICAL
The most general shape in the file — 2,060 lines, the single largest chart block. One value picks a single named shape (a superset of BUBBLE/SQUARE/LABEL above); more than one value field, or a CATEGORICAL aggregation, promotes the same code path into pie-like or bar-like multi-symbol layouts.
"in fact, bubble, line and area charts are derivants from SYMBOL charts!" — the source code's own comment, above the PLOT branch.
CIRCLESQUAREROUNDRECTCROSSDIAMONDTRIANGLEHEXAGONLABELEMPTY
+ any named SVG <symbol> id, or a full image URL (.svg/.png/.jpeg — SVG counts as an image here too, drawn via <image> not <use>)
symbols:circle
one entry → same shape for every value
symbols:circle|square|triangle
one entry per value — short lists repeat their last entry to fill the rest
FRAMEFIELD
SEQUENCEBASECONESTAREXPANDCOMPRESSRANDOMHORZLEFTTOPBOTTOMRINGS
stacks values inside one chart — for stacking whole charts on one position, see MULTIPLE/MULTIGRID/MULTIQUAD ↓
PLOTPLOTXPLOTYPLOTXYPLOTYXPLOTVARLOGINVERTGRADIENTSMOOTHLINREG
LINESAREAFADELOLLIPOP
LINES connects points with segments instead of discrete symbols; AREA fills to the baseline; FADE turns that fill into a gradient; LOLLIPOP adds a stem under each point, with or without LINES
STACKEDZEROISVALUEZEROISNOTVALUENOCLIP
INLINETEXT is listed under Labels below
LASTPOPLASTARROWLASTVALUE
GRIDBOX
nGridX/nGridY: small-multiples rows/columns
CATEGORICALDOMINANTPERCENTOFMEANDEVIATIONCOMPOSECOLORSUBTRACTIVE
SORTBYMEANBYMEDIANCLIPMORPHCOUNTAUTOSIZEINVERTSIZEDOPACITYGLOWAURA
VALUESAXISCENTERVALUESINLINETEXTMULTILINETEXTONLY
CHART|SYMBOL|CATEGORICAL · CHART|SYMBOL|SEQUENCE|STAR|EXPAND · CHART|SYMBOL|SEQUENCE|PLOT|GRID|BOX
A connector between two node positions, drawn in chartMap() — not drawChart() — since it needs a second position, often looked up on a FEATURE layer. VECTOR is the plain straight-line form; BEZIER bows into a curve and carries almost all of the richness below — width, opacity and color can all scale with the value, and the curve's bow can be shaped or randomized.
VECTORBEZIER
POINTERARROWDASH
DASH animates a flowing stroke-dashoffset
SHORTLONGRANDOMREVERSE
REVERSE also triggers automatically on a negative value
GAPDYNAMICWIDTHDOPACITYDOPACITYMIN
GRADIENTFADEIN
two-stop linear gradient along the line
VALUES
value text set on the curve's own path
CHART|VECTOR|POINTER|DASH · CHART|BEZIER|SHORT|POINTER|VALUES · CHART|BEZIER|GRADIENT|DYNAMICWIDTH
Smaller, more specialized branches of the same per-item drawing loop.
One unit square per count, gridded rather than stacked — a countable alternative to BAR.
GRIDSIZEAUTOSIZEWAFFLE100WAFFLE1000AUTO100SORTNot a value chart — a shape of a fixed real-world dimension around a point or along a line (buffersize). The same buffer geometry also doubles as a selection tool: newSelection(..., "type:BUFFER;buffersize:200") selects whatever falls inside it.
OVERLAYVALUEFast-path primitives, checked before the main dispatch chain — the code's own comment calls them the "most simple representation." No modifiers apply.
BLANK draws nothing — a test hook. USER hands drawing to your own function, named by userdraw: (e.g. userdraw:myChart → resolves ixmaps.myChart). The engine calls it as fn(SVGDocument, opt) once per feature, and repositions the result by whatever {x, y} it returns.
targetthemeitemdbRecordvaluevaluessizemaxSizecolortextcolorccolorclassflagmarkOptional myChart_init / myChart_finish run once before/after the per-feature loop, with a slimmer {target, theme}.
Everything under "Cross-shape modifiers" below is pure behavior — sort order, value math, animation timing. BOX is the odd one out: it actually draws something. A background, a border, and a title, attached to the shared per-position group — so it wraps every chart sharing that map point at once, not each one individually.
Drawn once per map position, sized to fit after every chart there is done — which is exactly why it doubles as the shared frame around a whole MULTIPLE/MULTIGRID/MULTIQUAD group (see Cross-shape modifiers) rather than one box per chart. Paired with GRID, it's also what turns a SYMBOL PLOT into a titled, framed sparkline.
BOXCIRCULAR
boxcolorboxopacitybordercolorborderstyleborderwidthboxmargin
borderstyle: dotted/dashed/solid/none · borderwidth: thin/thick
TITLEtitlefieldBOTTOMTITLECLIPPEDTITLE
boxupperboxlowertitleuppertitlelower
CHART|BUBBLE|BOX|TITLE;titlefield:name;boxcolor:white;bordercolor:#999 · CHART|BAR|MULTIGRID|BOX|TITLE · CHART|SYMBOL|SEQUENCE|PLOT|GRID|BOX
These aren't tied to one sub-shape — they act earlier in the pipeline (how values are aggregated or transformed) or later (how the result is drawn regardless of shape).
| Stage | Flags | Effect |
|---|---|---|
| Aggregation mode | AGGREGATE GROUP CATEGORICAL SEQUENCE |
Raw records collapse into per-location items; CATEGORICAL/SEQUENCE mark "one category value" data rather than N stacked fields. |
| Value combination | AGGREGATE SUM MEAN MAX MIN GROUP gridwidth/gridwidthpx RELOCATE |
Once AGGREGATE collapses several records onto one position, this decides how their numbers merge: SUM adds them (the default — or MEAN if a field100 percentage base is set), MEAN additionally divides by the item count, MAX/MIN keep a running maximum/minimum instead of summing. Matching is normally by exact position, but gridwidth (real-world meters) or gridwidthpx (constant screen pixels, recalculated every zoom) optionally snap positions to a spatial grid first. GROUP uses that same spatial binning but skips the combining step — items stay separate, just clustered and ordered within their bin. RELOCATE is a different concern again — it recomputes the merged position itself as the average of the original point positions, leaving the values untouched. |
| Value pipeline | FRACTION PERMILLE RELATIVE INVERT DIFFERENCE CALCVAL CALC100 PRODUCT |
Pre-processes the numeric value before any shape is drawn — independent of whether the result becomes a bar, a bubble, or a pie slice. |
| Size exponent | nSizePow: SIZEP1(1) · SIZEP1H(1.5) · default/SURFACE(2) · 3D/SIZEVOLUME(3) · SIZEP4(4) · SIZELOG(10) |
One shared exponent table drives BAR's dynamic width, and BUBBLE/SQUARE/SYMBOL's radius — "3D" and "VOLUME" are really just exponent = 3. |
| Rendering context | NORMSIZE MENUSIZE SILENT ZOOM XAXIS AXIS VALUES |
Legend-preview sizing vs. live-map sizing, tooltip suppression, zoom-dependent label fading, value-label toggles. |
| Animation | MORPH CLIP |
Animated presentation of a value sequence — interpolates between frames for time-series data, shared by BAR, BUBBLE/SQUARE and SYMBOL. (BUFFER was listed here before, but it's a geometry concept, not an animation one — see the BUFFER card above.) |
| Stroke | NOLINES |
Suppresses borders — honored identically in PIE, BUBBLE/SQUARE, and the choropleth legend. |
| Multi-chart layout | MULTIPLE/ALIGN · MULTIFIX/MULTIGRID · MULTISQUARE/MULTIQUAD |
When more than one whole chart instance lands on the same map position (two themes, or multiple aggregated parts), the default is to superpose them centered. These arrange them instead — flow by real measured bounding box (MULTIPLE, calls the costlier getBox()), snap to a fixed-size grid (MULTIGRID, row width from nGridX), or pack outward in an expanding square spiral (MULTIQUAD). Applies across BAR/BUBBLE/SQUARE/SYMBOL/PIE alike — distinct from SYMBOL's own SEQUENCE layouts above, which stack values inside one chart, not separate charts sharing a position. |
| Draw order | SORT/UP · 3D |
Two different jobs depending on the shape. On multi-value charts (PIE segments, BAR bars, SYMBOL|SEQUENCE parts) SORT reorders the values inside one chart. On single-value charts repeated across the map (BUBBLE, SQUARE, SYMBOL, BUFFER) there's nothing to reorder inside one chart, so SORT instead controls which chart instances draw on top: by default the larger value wins the top spot, SORT|UP flips it so the smaller one does. 3D plays a related but separate role — it forces charts to be drawn strictly in map-position order, top to bottom, so overlapping instances stack correctly regardless of SORT. |
| Legend display | NOLEGEND SIMPLELEGEND COMPACTLEGEND TEXTLEGEND |
Lives in the separate legend-panel renderer (ui/js/tools/legend.js), not the per-item drawing code above. NOLEGEND drops the theme from the legend panel entirely. SIMPLELEGEND collapses each entry to one compact inline line (swatch + label) instead of the default two-line layout (label, then a color bar with values); COMPACTLEGEND currently triggers that identical branch — no behavior distinguishes it from SIMPLELEGEND yet. TEXTLEGEND keeps the label but drops the color swatch. SILENT (Rendering context, above) suppresses the on-map tooltip either way, but whether it also hides the legend entry itself differs between two legend-rendering code paths in the repo. |