Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 18 additions & 18 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 8 additions & 6 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -462,12 +462,14 @@ sled = { git = "https://github.com/dathere/sled", branch = "v0.34.7-drop-fxhash"
# use our patched fork of whatlang to bump hashbrown until our PR is merged
whatlang = { git = "https://github.com/jqnatividad/whatlang-rs", branch = "bump-hashbrown-to-16" }

# Our Treemap/Sunburst PR has been merged (https://github.com/plotly/plotly.rs/pull/406)
# Pinned to the MapLibre-migration integration HEAD, which adds the MapLibre `map`-subplot
# traces qsv's `viz` maps now use: ChoroplethMap, DensityMap, and ScatterMap (replacing the
# deprecated *mapbox traces). Tracks upstream PRs #410 (Choropleth), #415/#416 (DensityMapbox
# hover+color / DensityMap) and the ScatterMap follow-up.
plotly = { git = "https://github.com/dathere/plotly", rev = "8d56b22" }
# Pinned to our stacked feature branch `feature/trace-type-additions` (PR
# https://github.com/plotly/plotly.rs/pull/423), a strict superset of the earlier pins:
# - MapLibre `map`-subplot traces qsv's `viz` maps use (ChoroplethMap, DensityMap,
# ScatterMap; upstream PRs #406/#410/#415/#416) — now merged into plotly:main
# - plotly.js 3.7 attribute backfill (legendrank/zorder/fillgradient/... ; PR #421)
# - new trace types Indicator, Histogram2d, Icicle + layout-level `uirevision` (PR #423)
# When #421/#423 merge upstream, repoint this to a plotly.rs release/main rev.
plotly = { git = "https://github.com/dathere/plotly", branch = "feature/trace-type-additions" }

# TRACKING: remove this patch when upstream resolves it (see exit conditions below).
#
Expand Down
5 changes: 4 additions & 1 deletion docs/help/viz.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,8 @@ treemap Part-to-whole hierarchy as nested tiles. --cols = 2+ dimension
columns (levels), optional --value and --agg.
sunburst Part-to-whole hierarchy as concentric rings (same inputs as
treemap). Better for deeper hierarchies.
icicle Part-to-whole hierarchy as stacked bars per level (same inputs as
treemap). Level-aligned; good for deep, wide hierarchies.
map Geographic point map (or --density heatmap) on tile basemaps.
Pick the coordinate columns with the lat/lon options below.
geo Geographic point map on a projection basemap (coastlines/land/
Expand Down Expand Up @@ -313,6 +315,7 @@ qsv viz geo [options] <input>
qsv viz choropleth [options] <input>
qsv viz treemap [options] <input>
qsv viz sunburst [options] <input>
qsv viz icicle [options] <input>
qsv viz --help
```

Expand Down Expand Up @@ -393,7 +396,7 @@ qsv viz --help
| &nbsp;`‑‑no‑nulls`&nbsp; | flag | Omit the "(NULL)" bar (empty cells) from frequency bar charts. By default `viz smart` shows a "(NULL)" bar, like `qsv frequency`. | |
| &nbsp;`‑‑no‑other`&nbsp; | flag | Omit the "Other (N)" aggregate bar from frequency bar charts. It collects the categories beyond --limit (N = how many distinct categories were rolled up) and is shown by default. | |
| &nbsp;`‑‑smarter`&nbsp; | flag | Before building the dashboard, run `qsv moarstats --advanced` to enrich the stats cache with distribution-shape statistics (bimodality, entropy, skewness, outlier share). This unlocks histograms for bimodal columns, frequency bars for concentrated high-cardinality columns, and skew/outlier hints on box panels. Costs one extra pass over the data and writes <stem>.stats.csv, its sidecars, and an .idx index (like running `qsv moarstats` manually). On geocode-enabled builds it also enriches map point hovers with the US FIPS code and annotates the spatial-extent summary with the country's continent; the county is always shown in map hovers, with or without --smarter. Only affects `smart`. Applied only with default parsing; inputs using --no-headers or a custom --delimiter fall back to the standard dashboard. | |
| &nbsp;`‑‑hierarchy‑style`&nbsp; | string | For `smart`, the chart used for the categorical part-to-whole hierarchy panel (built when 2+ low-cardinality dimensions exist). One of: auto (default), treemap, sunburst. auto follows best practice — a treemap for a shallow 2-level hierarchy (accurate size comparison) and a sunburst for a deep 3-level one (parent child structure). Only affects `smart`. | |
| &nbsp;`‑‑hierarchy‑style`&nbsp; | string | For `smart`, the chart used for the categorical part-to-whole hierarchy panel (built when 2+ low-cardinality dimensions exist). One of: auto (default), treemap, sunburst, icicle. auto follows best practice — a treemap for a shallow 2-level hierarchy (accurate size comparison) and a sunburst for a deep 3-level one (parent child structure); icicle is an opt-in level-aligned alternative. Only affects `smart`. | |
| &nbsp;`‑‑dictionary`&nbsp; | string | Use a describegpt Data Dictionary to guide panel selection from each field's semantic role/concept (falling back to its content type) instead of relying on column statistics alone: dimensions and numeric codes (ward, census_tract, zone) become bars, measures get box/correlation/trend panels, date/datetime columns feed the time-series panel (not noisy frequency bars), identifiers / PII / free-text are skipped, and lat/lon feed the map. Field labels are shown as panel subtitles beneath the field-name titles. Columns the dictionary cannot classify still use the statistical heuristic. <src> is one of: "infer" to run describegpt on the input now (with description, infer-content-type, two-pass and jsonschema output; requires an LLM configured) and use its output; or a path to an existing describegpt dictionary file (jsonschema or json). With "infer", the generated dictionary is saved beside the input as <stem>.schema.json so you can fine-tune it; if that file already exists, it is reused as-is (skipping the LLM) - edit it to fine-tune, or delete it to force a fresh re-infer. Generation/read failures soft-fall back to the stats-only dashboard. Only affects `smart`. | |
| &nbsp;`‑‑dictionary‑context`&nbsp; | string | Path to a file with extra context about the dataset (a glossary, README, data dictionary, PDF, etc.) forwarded to describegpt as --context-file when `--dictionary infer` generates the dictionary. Better context yields better role/concept/label/grain tags, hence a better dashboard. Ignored unless `--dictionary infer` is used (it does not apply when reading an existing dictionary file). Only affects `smart`. | |
| &nbsp;`‑‑dict‑info`&nbsp; | flag | When a usable Data Dictionary is available (per --dictionary), add a "Data Dictionary" link beneath the dashboard title and an info icon on each panel title: hovering shows that column's dictionary description; clicking opens a human-friendly rendering of the dictionary in a side drawer NEXT TO the plots (embedded in the dashboard file - no extra file is written), scrolled to and highlighting that column's entry. The drawer is open by default on load and can be dismissed with its close button or Esc. The dictionary page carries a role-tinted table of contents and per-column "View chart" links back to the panels. The drawer's popout button opens the same document in its own browser tab instead (needs a browser that allows user-initiated pop-ups). HTML output only; ignored with a note when no dictionary is available or when exporting an image. Only affects `smart`. | |
Expand Down
Loading
Loading