velociplot 0.1.0

Fast, publication-quality scientific plotting library - Quick, precise, and deadly effective
Documentation
# Changelog

All notable changes to this project will be documented in this file.

The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]

### Added
- Initial project structure and documentation
- Production readiness assessment
- Contributing guidelines
- Changelog

## [0.0.1] - 2025-11-20

### Added

#### Core Features
- Core plotting architecture with `Drawable` trait
- 2D coordinate system with automatic bounds calculation
- Asymmetric padding support (`with_padding_top`, `with_padding_right`)
- Color system with hex, RGB, and named colors
- 5 perceptually uniform colormaps (Viridis, Plasma, Inferno, Coolwarm, Magma)
- Series abstraction for data handling
- Comprehensive error handling with `thiserror`

#### Plot Types (15 total)
- **LinePlot** - Basic line charts with customizable colors and widths
- **ScatterPlot** - Scatter plots with 6 marker shapes (Circle, Square, Triangle, Diamond, Plus, Cross)
- **BarPlot** - Vertical and horizontal bar charts
- **StackedBarPlot** - Cumulative stacked bars with proper baseline anchoring
- **Histogram** - Distribution visualization with automatic binning
- **BoxPlot** - Statistical summary boxes with quartiles and outliers
- **ViolinPlot** - Distribution density visualization
- **QQPlot** - Quantile-Quantile plots for distribution comparison
- **PPPlot** - Probability-Probability plots
- **Heatmap** - 2D density visualization with colormap support
- **BubbleChart** - 3-variable scatter plots with size encoding
- **AreaPlot** - Filled area charts with custom baseline
- **StackedAreaPlot** - Cumulative stacked area charts
- **Treemap** - Hierarchical data visualization with squarified layout
- **Timeline** - Chronological event visualization (horizontal/vertical)
- **DateListPlot** - Time series visualization with Line/Points/LinePoints styles

#### Rendering & Output
- Skia backend via `tiny-skia` for high-quality raster rendering
- PNG output format
- Custom font support (TTF files)
- Embedded JetBrains Mono font as default
- Text rendering with `fontdue`
- Anti-aliased graphics

#### Axes & Layout
- Axis system with configurable position (Top, Bottom, Left, Right)
- Automatic tick generation and formatting
- Axis labels and titles
- Grid lines (major)
- Multiple axis support

#### Legends (4 types)
- **LineLegend** - Styled lines with color and width
- **PointLegend** - Marker shapes with customization
- **SwatchLegend** - Filled color boxes
- **BarLegend** - Color gradient bars for heatmaps
- 9 positioning options (UpperLeft, UpperCenter, UpperRight, MiddleLeft, etc.)
- Automatic legend positioning
- Legend alignment below plots
- Separate legend rendering
- Customizable vertical alignment for text/line alignment

#### Data Integration
- **ndarray** support - Plot from n-dimensional arrays
- **polars** support - Plot from DataFrames
- Vector-based data input
- Function-based data generation
- Tuple data format

#### CLI Tool (Framework)
- Command-line interface structure with `clap`
- Plot type selection
- Column specification
- Output file control
- Version command

#### Examples & Documentation
- 30 comprehensive examples covering all plot types
- 98 generated example images
- Complete API documentation
- 67 doc tests
- Usage examples in all modules

#### Testing
- 101 unit tests
- 67 doc tests
- 168 total tests with 100% pass rate
- Data validation tests
- Error handling tests
- Boundary condition tests

#### Developer Experience
- Builder pattern for ergonomic API
- Method chaining for fluent interface
- `#[must_use]` attributes on builders
- Sensible defaults throughout
- Comprehensive error messages
- Feature flags for optional dependencies

### Performance
- Pure Rust implementation (no Python/C dependencies for core)
- LTO optimization in release builds
- Single compilation unit for maximum optimization
- Efficient rendering with tiny-skia

### Infrastructure
- MIT license
- README with quick start guide
- Cargo.toml with feature flags
- Example organization
- Documentation comments throughout

## Project Statistics

- **Source Lines:** 9,759
- **Example Lines:** 4,943
- **Total Tests:** 168 (100% pass)
- **Plot Types:** 15
- **Examples:** 30
- **Generated Images:** 98
- **Dependencies:** Minimal (thiserror, tiny-skia, fontdue, png)

## Platform Support

- Linux ✅
- macOS ✅
- Windows ✅ (untested)

## Known Limitations

### Not Yet Implemented
- CLI functionality (framework exists but not functional)
- SVG output (placeholder feature flag)
- PDF output (placeholder feature flag)
- LaTeX math rendering (placeholder feature flag)
- 3D plots
- Contour plots
- Animation support
- Interactive plots
- Jupyter notebook integration

### Documentation Gaps
- User guide (API docs are complete)
- Tutorial series
- Performance benchmarks
- Migration guides

### Infrastructure Gaps
- CI/CD pipeline
- Automated testing on multiple platforms
- Performance regression tests
- Security audit

## Breaking Changes

None (initial release)

## Migration Guide

Not applicable (initial release)

## Contributors

- Ibrahim Cesar (@ibrahimcesar) - Initial implementation

## Acknowledgments

Inspired by:
- matplotlib (Python)
- Wolfram Language plotting
- plotters (Rust)

---

[Unreleased]: https://github.com/ibrahimcesar/velociplot/compare/v0.0.1...HEAD
[0.0.1]: https://github.com/ibrahimcesar/velociplot/releases/tag/v0.0.1