|
472 | 472 | ;; - Understand how composition merges layers |
473 | 473 | ;; - Debug layer construction before rendering |
474 | 474 |
|
| 475 | +;; ### 📖 Implementation Status |
| 476 | +;; |
| 477 | +;; This notebook implements a working prototype with: |
| 478 | +;; |
| 479 | +;; **Core features:** |
| 480 | +;; - ✅ Compositional operators (`=*`, `=+`) with threading-macro support |
| 481 | +;; - ✅ Plain Clojure data (maps, vectors - no dataset required) |
| 482 | +;; - ✅ Type-aware grouping (categorical aesthetics create groups) |
| 483 | +;; - ✅ Three rendering targets (`:geom`, `:vl`, `:plotly`) with feature parity |
| 484 | +;; - ✅ Malli schemas with validation and helpful error messages |
| 485 | +;; |
| 486 | +;; **Plot types & transforms:** |
| 487 | +;; - ✅ Scatter, line, histogram |
| 488 | +;; - ✅ Linear regression (with grouping support) |
| 489 | +;; - ✅ Faceting (row, column, and grid layouts) |
| 490 | +;; - ✅ Custom scale domains |
| 491 | +;; |
| 492 | +;; **Not yet implemented** (compared to `tableplot.v1.plotly`): |
| 493 | +;; - ⚠️ Bar, box, violin, density, smooth, heatmap, text, segment |
| 494 | +;; - ⚠️ Additional aesthetics: size, symbol/shape, fill, line-width |
| 495 | +;; - ⚠️ Transforms: kernel density, loess/spline smoothing, correlation |
| 496 | +;; - ⚠️ Coordinate systems: 3D, polar, geographic |
| 497 | +;; - ⚠️ Advanced layouts: subplots, secondary axes, insets |
| 498 | +;; - ⚠️ Interactivity: hover templates, click events, selections |
| 499 | +;; |
| 500 | +;; Missing features are deferred, not abandoned - the design should accommodate |
| 501 | +;; them without fundamental restructuring. |
| 502 | + |
475 | 503 | ;; # Malli Schemas |
476 | 504 | ;; |
477 | 505 | ;; The following Malli schemas define the structure and valid values for plot specs, |
|
889 | 917 | ;; 2. Efficiency - compute summaries (20 histogram bars), not raw data (1M points) |
890 | 918 | ;; |
891 | 919 | ;; # Proposed Design |
892 | | -;; |
893 | | -;; ### 📖 API Overview |
894 | | -;; |
895 | | -;; The API consists of three parts: |
896 | | -;; |
897 | | -;; 1. **Constructors** - Build partial layer specifications |
898 | | -;; 2. **Composition operators** - Merge layers (`*`) and overlay them (`+`) |
899 | | -;; 3. **Renderer** - Single `plot` function that interprets layer specs |
900 | | -;; |
901 | | -;; **Current Implementation Status**: |
902 | | -;; |
903 | | -;; - ✅ Core composition (`*`, `+`, layer merging) |
904 | | -;; - ✅ Threading-macro friendly API (`->` works naturally) |
905 | | -;; - ✅ Minimal delegation (compute transforms, delegate rendering) |
906 | | -;; - ✅ Type information from Tablecloth |
907 | | -;; - ✅ Type-aware grouping (categorical color groups, continuous doesn't) |
908 | | -;; - ✅ Explicit `:group` aesthetic for override control |
909 | | -;; - ✅ Three rendering targets (:geom, :vl, :plotly - all with full feature parity) |
910 | | -;; - ✅ Statistical transforms: linear regression, histograms (with grouping support) |
911 | | -;; - ✅ Faceting (row, column, and grid faceting across all targets) |
912 | | -;; - ✅ Custom scale domains |
913 | | -;; - ✅ ggplot2-compatible theming |
914 | | -;; - ✅ Plain Clojure data structures (maps, vectors - no dataset required) |
915 | | -;; - ✅ Malli schemas for layer validation |
916 | | -;; - ✅ Column existence validation with helpful error messages |
917 | | -;; |
918 | | -;; **What's Missing (compared to tableplot.v1.plotly)**: |
919 | | -;; |
920 | | -;; - ⚠️ Plot types: line, bar, box, violin, density, smooth, heatmap, text, segment |
921 | | -;; - ⚠️ Additional aesthetics: size, symbol/shape, opacity, fill, line-width |
922 | | -;; - ⚠️ Statistical transforms: density estimation, smooth (loess/spline), correlation |
923 | | -;; - ⚠️ Coordinate systems: 3D, polar, geo |
924 | | -;; - ⚠️ Advanced layouts: subplots, secondary axes, insets |
925 | | -;; - ⚠️ Interactivity: hover templates, click events, selections |
926 | | -;; - ⚠️ Handling missing data |
927 | | -;; |
928 | | -;; **Design Philosophy Differences**: |
929 | | -;; |
930 | | -;; This API prioritizes composability and algebraic clarity over feature completeness. |
931 | | -;; The focus is on a minimal, well-understood core that can be extended incrementally. |
932 | | -;; Missing features are deferred, not abandoned - they can be added as needed while |
933 | | -;; maintaining the compositional design. |
934 | 920 |
|
935 | 921 | ;; ### ⚙️ Helper Functions |
936 | 922 |
|
|
0 commit comments