vizdesk
A terminal app for data visualization work. Point it at a CSV or Excel file and it will:
- Profile every column: numbers, categories (including ordered ones such as class 1/2/3), dates, years, IDs and codes, free text, comma-separated lists, "number + unit" values such as
90 min, gaps, outliers, skew and capped values. - Suggest cleaning and normalization, each with a plain reason (for example "
TotalChargesis stored as text and 11 values are only spaces"). - Find the target (churn, survived, price ...) or let you pick one, and suggest charts for your goal, the way popular Kaggle EDA notebooks do: the target rate per category, a histogram of every numeric column, top-N rankings, trends, maps, hierarchies.
- Draw PNG figures with the grid, size, DPI and padding you choose, in a colorblind-safe palette by default.
- Save four files per figure: the PNG, a recipe to reopen and redraw it, a Python script that recreates it in a notebook, and alt text describing it.
All suggestions come from fixed rules and statistics computed on your data. No LLM and no internet connection are used.
The chart catalog (66 techniques, each with a description, the data it needs, when to use it and its limits) comes from the Data Scientists Handbook chart catalog, which is based on the Data Visualisation Catalogue (datavizcatalogue.com). vizdesk can draw all 66.
Install
| Tool | Command |
|---|---|
| pip / pipx / uv | pipx install vizdesk or uv tool install vizdesk |
| npm | npm install -g vizdesk (runs the Python package through uv, pipx, or a private venv) |
| Homebrew | brew install rafsunsheikh/tap/vizdesk |
Python 3.10 or newer is required (npm and Homebrew set that up for you).
Quick start
vizdesk # open the terminal UI
vizdesk churn.csv # open the UI with a file loaded
vizdesk auto data/ --goal target --show # no UI: every CSV/Excel file in data/ to PNGs, previewed in the terminal
The terminal UI
| Tab (key) | What you do there |
|---|---|
| Data (F1) | Load a file or folder, pick a table or Excel sheet, see the column profile and a preview. |
| Clean (F2) | Tick cleaning steps. SAFE steps (type fixes, trimming spaces, splitting 90 min into number and unit, dropping empty and leftover index columns) are ticked for you. Others, such as filling gaps, capping outliers, removing capped rows, grouping ages into ranges or adding year/month columns, wait for you. Unticking undoes a step, because cleaning always re-runs from the original file. |
| Suggest (F3) | Pick a goal and, if you like, a target column, press Auto scan, read why each chart is suggested, then add the ticked ones to a figure or draw them all at once. |
| Compose (F4) | Edit each panel (chart type, x, y, colour, size, multi-column list, aggregation, title, top N, bins, log scale, options) and the figure layout (rows, columns, width, height, DPI, padding on/off, padding size, theme, file name). ctrl+d draws, ctrl+o opens the PNG. |
| Gallery (F5) | Every figure in the output folder. Pick one and press Edit & redraw to change it. |
| Catalog (F6) | Search all 66 techniques. Use this chart adds it as a new panel. |
| Preview (F7) | The last drawn (or picked) figure, drawn in the terminal, with its alt text and script name. |
Your original files are never changed. Figures go to ./vizdesk-output unless you pass -o.
Command line
vizdesk catalog part whole # search the catalog
vizdesk catalog --show sankey_diagram # full details of one technique
vizdesk goals # the goals suggestions can target
vizdesk scan churn.csv --goal target # profile, cleaning and chart suggestions, printed
vizdesk scan housing.csv --target median_house_value
# auto: safe cleaning, top suggestions, split into 2x3 grids, no padding, 300 dpi
vizdesk auto sales.csv --goal explore --count 12 --rows 2 --cols 3 --width 15 --height 9 --dpi 300 --no-padding
# manual: choose every chart yourself
vizdesk draw sales.csv \
--panel chart=bar_chart,x=region,y=revenue,agg=sum \
--panel chart=sunburst_diagram,columns=Category+Sub-Category,y=Sales \
--panel chart=line_graph,x=date,y=close,filter=Name=AAPL,rolling=50 \
--rows 1 --cols 3 --width 18 --height 5 -o out/sales.png
# redraw: change panel 1, add a panel, widen the grid
vizdesk redraw out/sales.png --set 1:chart=violin_plot,y=revenue --add-panel chart=pie_chart,x=channel --cols 3
# preview in the terminal (Kitty, Ghostty, iTerm2, WezTerm, sixel, or coloured blocks anywhere)
vizdesk show out/sales.png
Panel fields: chart, x, y, hue (colour), size, columns=a+b+c (multi-column charts), agg (auto, count, sum, mean, median, min, max), title, top_n, bins, log_y. agg=auto sums columns whose names look like totals (sales, revenue, units ...) and averages the rest.
Any other key=value is a chart option. Options every chart understands:
| Option | Example | What it does |
|---|---|---|
filter |
filter=Name=AAPL or filter=region=North|South |
keep only matching rows |
split |
split=listed_in |
count each item of a comma-separated list column |
order |
order=label |
keep a natural order (1, 2, 3; age bands) instead of biggest first |
log |
log=x, log=y, log=xy |
log scale (zeros use a symmetric log) |
Some charts read their own options, for example rolling=50 (line), reversal=4% (kagi), box=1; reversal=3 (point and figure), last=120 (candlestick), geojson=regions.geojson; key=name (maps). The Compose tab shows the options of the selected chart.
Goals
| Goal | Typical charts |
|---|---|
| explore | a balanced overview: the best one or two charts from each goal below |
| target | target share, the target rate in every category (100% stacked bars), numeric columns split by the target; for a numeric target, its strongest partners |
| distribution | histogram grid of every numeric column, histograms (log scale for long tails), box, violin, density, ECDF, Q-Q |
| comparison | bar, grouped bar, error bars, radar, top 15 of a many-valued column |
| relationship | scatter or hexbin for the strongest pairs, correlation heatmap, scatter matrix, bubble, parallel coordinates |
| composition | sunburst and treemap for hierarchies (Category > Sub-Category), donut, pie, 100% stacked bar, stacked area |
| trend | lines over dates or years, by group, year by month heatmap, calendar; for price data, candlestick, moving average and the most traded series |
| ranking | top 15 bars (by a total or by count, never by an average of tiny groups), lollipop, dot plot, span |
| data_quality | missing values map, outlier box plots, capped-value histograms |
Maps appear when there are longitude and latitude columns; word charts appear for free text.
The four files of a figure
| File | What it is for |
|---|---|
figure.png |
the image (alt text is also stored inside it) |
figure.vizdesk.json |
the recipe: source file and sheet, cleaning steps, layout and panels. Used by Gallery and vizdesk redraw. |
figure.py |
a Python script that recreates the figure. Loading and cleaning are plain pandas; paste the # %% cells into a notebook to change them. |
figure.alt.txt |
alt text for reports and screen readers, written by rules from the data (for example "Laptop is highest at 652,645, 40% of the total"). |
How it was checked
The rules were tuned against 7 popular Kaggle datasets (Telco churn, Titanic, California housing, Netflix, Superstore, S&P 500 stocks, Wine reviews) and the EDA charts of their top-voted notebooks. tests/test_kaggle_shapes.py keeps each fix as a regression test on a small table of the same shape, and runs on the real files too when they are in datasets/kaggle/.
Development
uv venv && uv pip install -e '.[dev]'
python examples/make_examples.py # messy sample data
pytest
To refresh the catalog from the handbook: python scripts/build_catalog.py path/to/_chart_catalog_reference.md.
See PACKAGING.md for releasing to PyPI, npm and Homebrew.
Metadata
Release files for vizdesk 0.2.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| vizdesk-0.2.0.tar.gz | 112.1 kB | Without provenance | Details for vizdesk-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| vizdesk-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for vizdesk-0.2.0-py3-none-any.whl |
Total release size: 219.7 kB
Release files / vizdesk-0.2.0.tar.gz
| Download URL | vizdesk-0.2.0.tar.gz |
|---|---|
| Size | 112.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5c218e3e2ae766929109990219c81648d5f2e8ad8dfbeadd211da3fe5e722ecf
|
|
BLAKE2b-256 checksum How to use checksums |
8b2f887c1eafc98efff6340deebcacc0d3982c06741c416c622546a83546ca1d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|
Release files / vizdesk-0.2.0-py3-none-any.whl
| Download URL | vizdesk-0.2.0-py3-none-any.whl |
|---|---|
| Size | 107.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d59cf2c9e76a877a873ce0039ce1127475a8d0f9ab2dc8f1843e34107ccd6256
|
|
BLAKE2b-256 checksum How to use checksums |
638b75199bd4cf5244d61fc64e12105fd283d0878aa9d353f2847609a4403275
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.12.13
|
Security for vizdesk 0.2.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.