Imported from carlislejd/analystkit (
analystkit/_agent_skill/SKILL.md). Install upstream withnpx skills add carlislejd/analystkit --skill _agent_skill. Copyright stays with the author.
AnalystKit
AnalystKit creates QR report charts as editable vector SVGs. The September 15,
2026 handoff is authoritative: analystkit/colors.py, typography.py, and
layout.py own every visual rule. Rendering code consumes these modules.
| Preset | Width × height (points) | Intended use |
|---|---|---|
performance |
432 × 200 | Performance charts |
single-page |
612 × 240 | Default and general report charts |
new-flows |
612 × 200 | Flow charts |
portfolio-performance |
414 × 144 | Portfolio performance |
half-page |
288 × 216 | Half-page charts |
These are the only supported presets. Unknown names fail explicitly. The only
chart profile is report; single-page is its default. Exported dimensions
include the plot, ticks, and labels.
All chart text is PP Neue Montreal Mono Book, weight 375. One font size applies
to every role within each canvas: performance 8 pt, single-page 10 pt, new-flows
9 pt, portfolio-performance 7 pt, and half-page 8 pt. These sizes are owned by
typography.REPORT_FONT_SIZES_PT; only type scales, while design geometry stays fixed. SVGs use physical point dimensions while
retaining Plotly's CSS-pixel viewBox. The complete bundled Mono Book font is
embedded, and labels remain editable text. Illustrator editing requires the
same bundled font on the editing computer; embedding alone does not establish
Illustrator font support.
Charts omit headline, subtitle, source, and visible legend. The document owns those elements. Ordered legend specifications are stored in chart metadata. X ticks connect to the bottom axis; labels sit between tick boundaries. Axis label spacing is 6.12 pt from the axis; data-label spacing is 5.4 pt. Colors depend on series count, with Bitwise using its separate black role.
Workflow
import analystkit as ak
import plotly.graph_objects as go
fig = go.Figure(go.Bar(x=["Q1'26", "Q2'26", "Q3'26"], y=[10, 24, 17], name="Series"))
ak.apply_chart_profile(fig, "report", size_preset="single-page")
ak.attach_chart_metadata(fig, chart_id="example.flows", display_name="Sample flows",
source_labels=["Synthetic data"], units="Index")
ak.export_chart_bundle(fig, "outputs", "sample", formats=("svg",))
Normalize data first. Build a Plotly figure, apply the report profile, attach
metadata, validate, export, then inspect the SVG. Use graph objects for complex
charts and create_chart() for simple inputs. Do not restate visual tokens in
chart scripts. Keep network requests and file writes out of import time.