Chart library comparison¶
InsightDock Charts is a native C++17, headless, report-oriented charting library. This page compares it with the alternatives a C++ developer is likely to consider. It is deliberately honest: for several jobs another library is the better choice, and those are called out.
Versions and licenses were checked against each project's public documentation when this page was last edited (see Maintenance). Performance numbers live only in BENCHMARKS.md.
Which library should I use?¶
| If you need… | Use |
|---|---|
| Interactive plots inside a desktop app, zoom/pan, live data | ImPlot (Dear ImGui) or QCustomPlot / Qt Charts (Qt) |
| PNG / SVG / vector PDF from a server, CLI tool or firmware — no GUI, no Python | InsightDock Charts |
| Scientific plotting with MATLAB-style API, 3D, many plot kinds | Matplot++ or PLplot |
| Charts in a web page | Chart.js, Apache ECharts, Plotly |
| The widest chart catalogue in C++ and you accept a commercial license | ChartDirector |
| Candlesticks, indicators, tick-by-tick finance | A finance-specific library (InsightDock Charts has none of this) |
At a glance¶
| InsightDock Charts | QCustomPlot | Matplot++ | ImPlot | Qt Charts | PLplot | ChartDirector | |
|---|---|---|---|---|---|---|---|
| License | MIT | GPL-3 / commercial | MIT | MIT | GPL-3 / commercial (Qt) | LGPL | Commercial |
| Needs a GUI toolkit | No | Qt | No | Dear ImGui | Qt | No | No |
| Needs Gnuplot / Python | No | No | Gnuplot (rendering) | No | No | No | No |
| Headless / server use | Yes | Possible (Qt without display) | Yes, via Gnuplot | Awkward | Possible | Yes | Yes |
| Interactive | No | Yes | Limited | Yes | Yes | Limited | Limited |
| PNG / JPEG | Yes | Yes | Yes | Via screenshot | Via grab() |
Yes | Yes |
| SVG | Native vector (pie, bar, line, area, combo); raster embed otherwise | Not built in (PDF + raster only) | Yes | No | Via QSvgGenerator |
Yes | Yes |
| Vector PDF | Yes, with optional PoDoFo (pie, bar, line, area, combo) | Yes (savePdf) |
Yes | No | Via QPdfWriter |
Yes | Yes |
| Embedded / OpenWrt build | Yes: Make, STL + stb only | No | No | No | No | Heavy | Not a target |
| Chart breadth | Pie, doughnut, bar, line, area, combo, scatter/bubble, histogram | Many 2D plot kinds | Very broad, incl. 3D | Many 2D plot kinds | Standard business charts | Very broad | Very broad |
Entries marked "Possible" or "Awkward" reflect how the library is normally used, not a hard limit.
Open source, C++¶
QCustomPlot¶
Mature, widely used Qt widget with excellent interactivity and plot variety. Pick it if your application is already Qt and you want users to explore data. Its GPL-3 license (commercial option available) matters for closed-source products. InsightDock Charts differs in not needing Qt at all, so it runs in a daemon, a CLI or a router, and it ships a permissive MIT license. QCustomPlot is the better fit for anything interactive.
Matplot++¶
A C++ take on MATLAB/matplotlib plotting with a very large range of plot types, 3D included. It renders through Gnuplot, so a Gnuplot installation must be present at runtime. InsightDock Charts has a much smaller catalogue but renders in-process with no external program, which is what makes the OpenWrt and container cases work. Pick Matplot++ for exploratory or scientific work.
ImPlot¶
Immediate-mode plots for Dear ImGui: fast, live, interactive. It is a debugging and tooling library, not a report engine; producing a file means capturing the framebuffer. InsightDock Charts is the opposite trade: static, deterministic output, no window.
Qt Charts¶
Standard business charts for QWidget/QML with animations and interaction. Requires the Qt stack (GPL-3 or commercial). Choose it inside a Qt application; choose InsightDock Charts when there is no Qt.
PLplot¶
Long-established scientific plotting with many output devices. LGPL, C-style API with Fortran heritage, heavier to build and package. InsightDock Charts offers a modern C++17 API and a much smaller footprint but far fewer plot kinds.
matplotlib-cpp¶
A wrapper that embeds a Python interpreter and calls Matplotlib. Output quality is Matplotlib's; the cost is a Python runtime on every machine that renders. Not practical for firmware.
Commercial¶
ChartDirector¶
The broadest commercial C++ charting catalogue (3D, gauges, Gantt, finance, many language bindings), with strong PDF output. InsightDock Charts does not try to match that breadth; it covers the common business charts, is open source, and has no license keys. If you need charts that InsightDock Charts does not have, ChartDirector is a legitimate choice.
StockChartX¶
A finance charting component: candlesticks, technical indicators, real-time updates. InsightDock Charts has none of these and is not aiming at that niche for 1.0.
Web and other stacks¶
| Library | Typical use | Relation to InsightDock Charts |
|---|---|---|
| Chart.js | Browser dashboards | Different runtime. InsightDock Charts' default palette is Chart.js-style so server-rendered reports match a web dashboard. |
| Apache ECharts | Rich interactive web charts | Far broader; use it for the web. |
| Plotly | Interactive analytics | Use it for exploration; InsightDock Charts is for deterministic batch output. |
| Matplotlib (Python) | Scripts and notebooks | Use it if Python is acceptable on the machine that renders. |
What InsightDock Charts is good at¶
- MIT license, no keys, no copyleft obligations.
- No GUI toolkit, no Python, no Gnuplot. The core is the C++ standard library plus vendored stb headers.
- Native vector SVG and PDF for all built-in charts: real paths and selectable text. PDF output needs the optional PoDoFo dependency.
- Simple export API:
ChartExporter::save(chart, "out.png"), with the format inferred from the extension. - Small, cross-compilable build: a Make build for OpenWrt with selectable chart types, export formats and font mode. Sizes are in the README.
- Deterministic rendering with an embedded font, so the same input gives the same chart on every machine.
- CI on Linux x86-64 and ARM64, macOS and Windows (see the workflow for the current matrix).
Where InsightDock Charts is limited today¶
- Static output only. No zoom, pan, tooltips or hit-testing.
- Chart catalogue. No heatmap, box plot, radar, gauge, candlestick or 3D yet; see ROADMAP.md.
- No error bars in 1.0.
- Text shaping. Glyphs are drawn left to right from the TTF with no complex-script shaping and no right-to-left support. The embedded fonts cover ASCII or Latin-1/Latin-Ext; other scripts need a user-supplied TTF.
- Source compatibility only. Binary (ABI) compatibility between releases is not promised; see the release process.
- Young project. 1.0 is the first public release; the competitors above have years of field use.
Maintenance¶
- Update this file when adding chart types or export formats.
- Do not add performance claims until BENCHMARKS.md has numbers that back them.
- Before each release, re-check each competitor's license and feature list against its own documentation.