High-performance charting engine for Python — render publication-quality charts via .NET interop
Project description
Chartexa — High-Performance Charting for Python
Render publication-quality charts in Python using the Chartexa .NET engine — 40+ series types, real-time streaming, Jupyter integration, and GPU-accelerated rendering.
Installation
pip install chartexa
Prerequisites
- Python 3.9+
- .NET 10 Runtime installed on your system
Production-Ready Capabilities
- 40+ series types (2D, 3D, financial, scientific, instrumentation)
- High-volume rendering with downsampling and batched updates
- Native NumPy/Pandas interoperability
- Real-time streaming and dashboard layout primitives
- Notebook-first experience across Jupyter/VS Code/Colab
Quick Start
One-liner
import chartexa as cx
cx.line([10, 20, 15, 30, 25]).save("chart.png")
Fluent API
import chartexa as cx
(cx.Chart(800, 600)
.line([1, 2, 3, 4], [10, 20, 15, 30], stroke="#4FC3F7", label="Revenue")
.scatter([1, 2, 3, 4], [12, 18, 17, 28], fill="red", label="Targets")
.save("multi_series.png"))
Financial Chart
import chartexa as cx
import pandas as pd
df = pd.read_csv("stock_data.csv")
cx.candlestick(df).save("candlestick.png")
Multi-Panel Dashboard
import chartexa as cx
fig, axes = cx.subplots(2, 2)
axes[0, 0].line([1, 2, 3], [10, 20, 15])
axes[0, 1].scatter([1, 2, 3], [30, 10, 25])
axes[1, 0].bar(["A", "B", "C"], [40, 60, 30])
axes[1, 1].mountain([1, 2, 3], [5, 15, 10])
fig.save("dashboard.png")
Real-Time Streaming
import chartexa as cx
chart = cx.Chart()
with chart.begin_update():
chart.line(sensor_x, sensor_y, label="Temperature")
chart.line(sensor_x, humidity_y, label="Humidity")
chart.save("sensors.png")
Features
40+ Series Types
| Category | Series |
|---|---|
| Basic | Line, Scatter, Column, Bar, Mountain, Band, Bubble |
| Financial | Candlestick, OHLC |
| Statistical | BoxPlot, ErrorBar, Fan, Heatmap, Pie, Donut |
| Stacked | StackedBar, StackedColumn, StackedMountain |
| Polar | Polar, Radar |
| Scientific | Oscilloscope, SpectrumAnalyzer, Waterfall, Lissajous, BodePlot, NyquistPlot |
| Instruments | Gauges (Angular, Radial, Linear), Thermometer, Compass, VuMeter |
| Digital | DigitalLine, DigitalBand, LogicAnalyzer, EyeDiagram, ConstellationDiagram |
| Geospatial | GpsTrack, SkyView, RadarSweep |
| Widgets | Alarm, Battery, PowerMeter, StatusLamp |
| 3D | XYZSurface |
Interactive Modifiers
Zoom/pan, tooltips, crosshair, cursor, rubber-band zoom, data point selection, and series selection.
Theming & Styling
Built-in themes, custom colors (hex, RGB, CSS names), dash patterns, markers, and gradient palettes.
Axes
Numeric, DateTime, Logarithmic, and Category axes with full customization.
Data Sources & Streaming
Connect to MQTT, WebSocket, REST, gRPC, Serial (Arduino/ESP32), GPS, Audio, System Metrics, Docker, Market Data, OBD-II, CAN Bus, SDR, Flight Sims, Racing Sims, and more.
Data Transforms
Built-in moving_average, exponential_smoothing, derivative, integral, low_pass_filter, high_pass_filter, bollinger_bands, and more.
Performance & Large Data
- LTTB downsampling — visually lossless reduction for million-point datasets
- Min/Max downsampling — preserves extrema for financial/sensor data
- FIFO ring buffer — fixed-capacity streaming with automatic eviction
- Batch updates —
chart.begin_update()suspends rendering for bulk operations - NumPy/Pandas integration — pass arrays directly, zero-copy where possible
Layout & Dashboards
subplots(rows, cols)— matplotlib-style grid layoutsFigure/Dashboard— named panels with row/col spans- Constraint-based sizing (fixed + proportional)
Jupyter & Notebook Integration
- Auto-detected in Jupyter, VS Code, Colab, Kaggle, and more
display_chart()renders inlineChartWidgetfor interactive ipywidgets%cx/%%cxmagic commands- Colab GPU/CPU/TPU runtime detection
Export Formats
- PNG —
chart.save("chart.png")orchart.to_bytes() - HTML —
chart.to_html()/chart.save_html("chart.html") - Inline —
chart.show()(opens in browser or displays in notebook)
How It Works
Chartexa for Python uses pythonnet to call into the Chartexa .NET charting engine. The Python package bundles the compiled .NET assemblies and provides a Pythonic API with fluent method chaining, NumPy/Pandas interop, and Jupyter integration.
Python API → pythonnet bridge → Chartexa .NET Engine → SkiaSharp renderer → PNG/HTML
Links
- GitHub Repository
- NuGet Packages (C# libraries)
- Changelog
- Publishing Guide
PyPI Publishing (Maintainers)
Use the full instructions in ../docs/PUBLISHING.md. Summary:
python -m build
twine check dist/*
twine upload dist/*
For test deployments:
twine upload --repository testpypi dist/*
License
MIT — see LICENSE for details.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file chartexa-1.0.1.tar.gz.
File metadata
- Download URL: chartexa-1.0.1.tar.gz
- Upload date:
- Size: 83.6 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d858dac7c920f72b475810f32dce2cb3174399f66a2fd5b1134ef4df20f781ff
|
|
| MD5 |
5bb048df926410b44aa57489202df704
|
|
| BLAKE2b-256 |
f0f417e47c797bc603fe140b70371a948ad65a78f43d86638beaeadeba231b28
|
File details
Details for the file chartexa-1.0.1-py3-none-any.whl.
File metadata
- Download URL: chartexa-1.0.1-py3-none-any.whl
- Upload date:
- Size: 84.3 MB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.10
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2bf33c0cec62809b9c2603e41bc45874d17ace9572b35696216798fd14c585c7
|
|
| MD5 |
ca14eefe921b8c5dfc4be308770e9ad4
|
|
| BLAKE2b-256 |
211bc436c32526e95e5f3f63a98e87ac6dde666b7185b9d6207d71350e0d43fe
|