[general]
name=02viz - Geospatial Visualization Studio
qgisMinimumVersion=3.28
qgisMaximumVersion=4.99
description=Geospatial data visualization studio: multi-engine, interactive, publication-quality charts from QGIS layers and external data.
version=0.16.0
author=Yusuf Eminoglu
email=yusuf.eminoglu@deu.edu.tr

about=02viz (Zero2Visual) turns QGIS into a full data visualization studio — from zero to elegant visuals, fast. One dock, three tabs: Charts, Map diagrams and Labels. The Charts tab renders seventeen chart types (bar, line, area, scatter, bubble, histogram, pie, box, heatmap, treemap, sunburst, mean ± σ band, mean ± σ bars, density KDE, violin, radar and Pareto) through three vendored offline engines (Apache ECharts, Plotly.js and Vega-Lite), plus an optional matplotlib/seaborn engine for publication-grade static figures you can add to the QGIS Python yourself. Animate any bar, line, area, scatter, bubble or pie chart over a time or sequence field — a bar-chart race, Gapminder-style bubbles, composition or trends over the years — with a play axis, slider and play/pause, axes and colours held steady across frames (ECharts and Plotly). One click on Explore profiles any layer into a full interactive dashboard — KPI cards with completeness, a field-summary table (type, missing rate, distinct, range/top), auto charts, a normalised box plot putting every numeric field on one comparable axis, a correlation matrix and plain-English insights (skew, outliers, near-constant and mostly-empty fields), skipping identifier columns. The Map diagrams tab draws native QGIS pie/bar/stacked/text diagrams on every feature, with optional Min–max, Z-score or Log normalisation so fields on very different scales stay comparable instead of one big-number field swamping the rest, proportional sizing by a chosen field for classic proportional-symbol maps, an opacity control, and an option to let QGIS drop crowded diagrams instead of always stacking every one of them. The Labels tab turns fields into formatted, multi-line labels — rounding, thousands separators, prefix/suffix and units, case, word-wrap, a second field on its own line, a rounded background chip, or any QGIS expression — with a live preview. A built-in offline user guide explains every part (with copy-ready expression recipes and AI-assistant prompts), and a Suggest button reads your layer's fields to recommend the most insightful chart. Charts and the map stay linked both ways (click to select, select to cross-filter). Eight colour palettes plus an embedded swatch editor for your own colours, applied identically across every engine. Built-in aggregation, group/color-by, Top-N, trend lines, reference and statistics overlays (mean, median, a target value, a ±1σ band and the inter-quartile band) and pure-Python statistics; chart vector layers, attribute tables or external CSV/XLSX files; export charts as self-contained HTML, SVG, PNG and PDF files. Custom Vega-Lite specs, dashboard tile selection and extended cross-filtering are included. Developed with feedback from educational workflows at Dokuz Eylul University, Department of City and Regional Planning. Online User Manual & Documentation: https://geophilo.com/zero2viz/ | If you find this plugin helpful, please consider starring the repository on GitLab (https://gitlab.com/geospacephilo/zero2viz)!

tracker=https://gitlab.com/geospacephilo/zero2viz/-/issues
repository=https://gitlab.com/geospacephilo/zero2viz
homepage=https://geophilo.com/zero2viz/

category=Vector
tags=planx,charts,plots,graphs,dataviz,visualization,plotly,vega,echarts,matplotlib,seaborn,statistics,dashboard,diagrams,labels,attribute table

icon=icons/icon.png

experimental=False
deprecated=False
hasProcessingProvider=no
license=GPL-3

changelog=
    0.16.0 - Completed reliable self-contained HTML, PNG, SVG and PDF publishing with atomic writes and real QGIS runtime tests. Added clear bounded-data provenance to chart status and Explore dashboards. Fixed inactive render-export actions, PDF viewport fitting, Windows SVG/PDF file locking, and package discovery outside a live QGIS session.
    0.15.13 - Reverted 0.15.11's two-column pairing of the Charts tab's X/Category+Y and Group/Color+Value/Size field pickers, back to one field per row as before.
    0.15.12 - Reverted the shorter tabs from 0.15.11 (back to the original height) and widened them by the requested 1.2x instead. Brought back a clear visual "this tab is open" indicator, this time as a small teal dot icon on the active tab rather than a border — icons are a native QTabBar feature that can't collide with this tab bar's box-model quirks the way a border did in 0.15.9.
    0.15.11 - Shorter, wider tabs: the tab strip's vertical padding is cut roughly in half and the horizontal padding is increased, direct feedback on how the tab row should read. The Charts tab's X/Category+Y and Group/Color+Value/Size field pickers are now paired two-up in one row each instead of four separate full-width rows, saving vertical space in an already long card.
    0.15.10 - Reverted 0.15.9's accent-stripe border on the active tab: a real screenshot showed it covering part of the tab text with a white strip instead. The active tab is shown with its background/text colour again, same as every release before 0.15.9 — no border property on this tab bar at all, since this native tab style has already shown once that it does not reliably honour a custom QSS border addition. Tab widths remain proportionate to each label (unchanged from 0.15.9).
    0.15.9 - Redesigned the tab strip: each tab is now sized to its own label instead of all three being forced to match the widest one ("Diagrams"), which had made "Charts" and "Labels" look oversized and inconsistent. The active tab is now shown with a clean teal accent stripe along its top edge, a clearer and more standard way to say "this one is open" than a size/colour difference alone.
    0.15.8 - The tab labels (Charts/Diagrams/Labels) are sized correctly now on every machine: a second real screenshot showed "Diagrams" and "Labels" still losing their last letter to ellipsis, meaning every fixed padding number tried so far (0.15.2-0.15.7) still fell short of real desktop font rendering. Instead of guessing another number, the tab width is now measured at runtime from the actual font Qt is using on your machine, with a generous safety margin — it can no longer be wrong about its own text's width.
    0.15.7 - Tabs are noticeably bigger than their own text now, not just barely fitting. Suggest on a wide/tall layer no longer pulls every field into memory before deciding whether to sample — the field count itself is now bounded up front (the O(fields^2) scan cap alone wasn't the whole story behind the earlier crash report). Removed the toolbar's separate "About" icon; its content already lives in the Guide. The Guide now links to the online documentation site. Histogram axis labels are rounded to at most 3 decimal places instead of Python's 6-significant-figure default, which could produce long, unreadable numbers for small-magnitude fields.
    0.15.6 - Found the actual cause of the tab-label clipping, from a user screenshot: every tab was missing its first letter ("Charts"→"harts", "Diagrams"→"iagram", "Labels"→"abels"), a known Qt/Windows quirk where the native tab style's own left inset fights a custom stylesheet's padding under real Windows theming (not reproducible in this project's offscreen test harness, which is why earlier attempts missed it). Fixed with extra left padding on each tab plus a small leading space in the label text, so whatever gets eaten from the left is never a real letter.
    0.15.5 - Gave the tab strip more visible breathing room (more padding around each label, without a fixed minimum width, so tabs still shrink to fit any dock size). Suggest on a wide/tall layer now asks first: use a fast representative sample (recommended, the previous default) or scan the entire dataset. Either way the studio tells you which one it used, and offers a full re-scan when a sample was used.
    0.15.4 - Fixed a real regression from 0.15.2/0.15.3: forcing the tab strip to expand and stay at a fixed minimum width meant it held that size even on a dock too narrow to show it, and with the panel's horizontal scrollbar disabled the overflow simply ran off the edge — worse than the original clipping. Tabs are back to their natural, always-fit size with a graceful fallback, and the panel's horizontal scrollbar now shows when something genuinely needs it, so nothing can go silently unreachable again. Also fixed the actual driver of an oversized panel: two tab intro sentences (Map diagrams and Labels) were missing word-wrap and were forcing the whole studio more than 1000px wide on their own. Fixed a real crash/hang risk in 💡 Suggest: scanning every pair of numeric fields for the strongest correlation is quadratic in field count — harmless on a normal layer, but a grid/zonal-statistics layer with dozens of derived numeric columns and up to 100,000 rows could turn that into hundreds of millions of operations on the UI thread. The scan is now bounded to a sample of rows and the first 40 numeric fields, so Suggest stays fast and safe regardless of how wide or tall the layer is.
    0.15.3 - The Map diagrams tab is now labelled "Diagrams" in the tab strip: even with the wider, evenly-shared tab ribbon from 0.15.2, the full label could still run tight against real desktop fonts on a narrow dock. A shorter, guaranteed-to-fit label plus a text-elide fallback (so any future overflow shows "…" instead of silently clipping) removes the dependency on exact dock width or font metrics. The Guide and Suggest button text now say "Diagrams tab" to match.
    0.15.2 - The Charts / Map diagrams / Labels tabs now stretch to fill the full width of their row instead of just their own text, giving the longest label ("Map diagrams") much more room. The Render chart button — the single most-used action in the studio — now carries a soft salmon accent border so it stands out at a glance.
    0.15.1 - Fixed two dock readability issues: on a short panel the content was simply squashed instead of scrolling, so lower rows in the Charts/Map diagrams/Labels tabs could become unreachable — the studio now scrolls when there is not enough height, and still stretches to fill a tall dock as before. Also fixed the active tab's label — the selected tab turned bold while the others stayed regular weight, and Qt does not re-lay-out a tab's box when only its font weight changes on selection, so the wider bold glyphs no longer fit their own tab and looked clipped/unreadable ("Map diagrams" worst of all). Every tab is now the same weight, sized to fit from the start.
    0.15.0 - Fixed the toolbar icon needing two clicks to actually open the studio: a freshly created dock is already visible, so the old toggle logic immediately flipped it back to hidden on that first click. Map diagrams gain proportional sizing (scale each feature's diagram between a small and a full-size one by a chosen field's value, for classic proportional-symbol maps), an opacity control, and an option to let crowded diagrams drop instead of always stacking every one of them. Labels gain a new Chip preset — a rounded background badge behind the text — alongside the existing halo presets.
    0.14.0 - Add an explicitly approved SmartModeler GIS bridge that selects one live project vector layer and renders 02viz's existing offline smart chart suggestion without exposing paths, URLs, expressions, exports, arbitrary methods or feature values.
    0.12.0 - Reference and statistics overlays: add horizontal guide lines and shaded bands to bar, line, area, scatter and bubble charts — the mean, the median, a target value you type, a ±1σ band and the inter-quartile (Q1–Q3) band — computed in pure Python from the plotted values and drawn identically by every engine (ECharts, Plotly, Vega-Lite and matplotlib). Turn any combination on from the Charts tab; they read the same in light and dark themes and export with the chart. Hardening: the studio no longer shells out to pip — when the optional matplotlib/seaborn engine is missing it now shows the exact install command for you to run yourself instead of running it, so the plugin stays offline and side-effect free and passes the QGIS Plugin Hub security scan cleanly.
    0.11.1 - Removed the shared top-level "&02viz" QGIS menu; the studio now only adds its toggle icon to its own toolbar, so it no longer shows up as its own menu tab next to Help. The dock now also remembers the last folder used to load an external table or export a chart as HTML/PDF, across QGIS sessions.
    0.10.1 - Hub upload compatibility fix: metadata text no longer contains a raw percent sign, which QGIS Plugin Hub's INI parser treats as interpolation syntax. Plugin code and features are unchanged from 0.10.0.
    0.10.0 - Map diagrams, labels and a built-in guide, levelled up. Map diagrams can now normalise their fields — Min–max (0–1), Z-score or Log — so a pie or bar compares fields on different scales fairly instead of one big-number field swamping the rest (each field's min/max/mean/std are computed from the features and baked into the diagram expressions; nothing is written to your data). Labels are now expression-driven: round numbers, add a thousands separator, stack a second field on its own line, add a prefix/suffix or units, change case, word-wrap, or type any QGIS expression — with a live preview and a first-feature sample (numeric formatting is applied only to numeric fields, so a name on a second line is never wrapped in round()). A new Guide button opens a full, offline user guide — what every part does, the normalisation modes, copy-ready label-expression recipes and prompts for an external AI assistant. A Suggest button reads the active layer's fields and configures the most insightful chart for you. Explore is richer: a collapsible field-summary table (type, missing rate, distinct, range/top), an overall completeness KPI, a normalised box plot putting every numeric field on one 0–1 axis, and deeper insights (skew with a log-transform hint, outliers, near-constant and mostly-empty fields, more correlations). Everything stays fully offline with no new dependencies; verified end-to-end on QGIS 3.44 and 4.
    0.9.2 - Plotly and Vega-Lite no longer leave a blank embedded panel on QGIS builds that ship only the legacy QtWebKit viewer (no QtWebEngine): those engines need modern JavaScript the old viewer cannot run, so their charts stayed blank in the dock although they exported and opened fine in a browser (ECharts and matplotlib were unaffected). The dock now detects this and shows a short "open in your browser" explainer instead of a silent blank panel; the chart is still built for the Export HTML and the browser (arrow) button. Switch to ECharts for a chart that renders inside the dock, or install QtWebEngine for QGIS.
    0.9.1 - QGIS 4 (Qt6) readability: the studio panel now pins its own light colours for every control, so it reads the same under any QGIS theme. On QGIS 4 the dark application palette was bleeding into the parts the panel did not explicitly colour — drop-down lists rendered on a near-black background and field labels and check-box text faded into the white cards. Combo pop-ups, line edits, spin boxes, the field list, labels, check boxes and tool-tips are now explicitly styled (white fields, dark text, teal selection). QGIS 3.x was unaffected and is unchanged, as are the chart engines.
    0.9.0 - Animated charts (play axis): pick a field such as a year and the chart plays through its values — a bar-chart race, Gapminder-style bubbles, composition or trends over time. Works in ECharts (timeline) and Plotly (slider + play/pause) for bar, line, area, scatter, bubble and pie. Categories, series colours and axes stay fixed across frames (bubble sizes are scaled once, globally) so things animate in place, and animated bars/points still click to select features on the map. Pure-Python frame builder, fully offline, no new dependencies.
    0.8.0 - Three-tab studio under one dock: Charts, Map diagrams and Labels, sharing one layer selector. New Labels tab adds quick, elegant feature labels (clean/halo/bold presets) via native QGIS labeling. Embedded colour editor: the palette swatches are now inline in the Charts tab — click to recolour, +/- to resize, no modal — plus a chart-title override. Optional advanced engine: a matplotlib/seaborn renderer for publication-grade static figures, listed in the engine picker and installed on demand (auto-detect missing libraries, one-click pip install into the QGIS Python). 'Zero2Visual' motto surfaced in the dock and About. The vendored JS engines remain zero-dependency and offline.
    0.7.0 - Map diagrams: draw native QGIS pie / bar / stacked-bar / text diagrams on every feature, on the map canvas, coloured with the studio palette (they print and export to layout like any symbology). Custom colour palettes: a swatch editor lets you define your own series colours, applied identically across all three engines. Fixed charts staying blank in the embedded dock while exporting fine (the viewer now gives the chart a definite size and re-fits once laid out; an 'open in browser' escape hatch and the active web backend are shown). Engine-first workflow: pick the renderer, then choose from the chart types it can draw. Explore now ignores identifier columns (fid, id, gid, uuid, primary keys) that carry no analytical meaning. Publication-grade visual polish across every engine: one type system, soft dashed gridlines, clean card tooltips and rounded bars.
    0.6.0 - Six advanced chart types (17 total): Mean ± σ band (line with shaded ±1 standard-deviation envelope), Mean ± σ bars (bars with std-dev whiskers), Density (Gaussian KDE, optionally one curve per group), Violin (mirrored KDE shapes with median dots), Radar/spider (multi-axis comparison with per-axis scaling) and Pareto 80/20 (descending bars + cumulative-share line on a second axis). All statistics computed in pure Python; rendered by all three engines from one spec (radar is greyed out for Vega-Lite, no polar grammar). New Colors selector with 8 curated palettes (Vivid, Colorblind safe, Viridis, Sunset, Ocean, Earth, Berry, Grayscale print) that override the theme palette identically in every engine, single charts and Explore dashboards alike.
    0.5.0 - Third engine: Vega-Lite (vendored vega + vega-lite, BSD-3) renders 9 of the 11 chart types from the same spec contract, with full chart-to-map clicks and map-to-chart cross-filter dimming; the dock greys out chart types an engine cannot draw. Heatmap label contrast fixed on sequential ramps in all engines (white labels only on dark cells).
    0.4.0 - Map-to-chart cross-filter: selecting features on the canvas instantly dims non-selected items in the chart and in every dashboard tile, without a re-render. Crash-safe selection bridge: chart clicks now reach QGIS through the page title (titleChanged) instead of object injection, fixing an access-violation crash in QGIS builds that ship the legacy QtWebKit stack; the chart-to-map link now works identically on WebKit and WebEngine.
    0.3.1 - Package directory renamed to zero2viz to satisfy the QGIS Plugin Hub PEP 8 package-name requirement (the previous digit-first name was rejected at upload). Plugin display name, features and behaviour are unchanged.
    0.3.0 - One-click Explore: profile any layer into a complete interactive dashboard (KPI cards, auto-charts per field, Pearson correlation matrix, strongest-relationship scatter with trend, plain-English insights), exportable as a single HTML. Zero-based bar/area/histogram axes, heatmap label contrast, human number formatting.
    0.2.0 - Second engine (Plotly.js) + 5 new chart types (area, bubble, heatmap, treemap, sunburst) = 11 total. Chart-to-map selection: clicking a bar, slice or point selects the features on the canvas (WebKit and WebEngine bridges). Live mode re-renders on selection change. Group/color-by series, stacked bars and areas, Top-N with Other, value sorting, least-squares trend line, 4 themes.
    0.1.0 - Chart studio MVP: 6 chart types (bar, line, scatter, histogram, pie, box) rendered by a vendored ECharts engine, aggregation, selected-only mode, external CSV/XLSX tables, embedded viewer with browser fallback, one-file HTML export.
