| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [View Raw Code] [Original HTTPS Page] |
Encoded-array support is a shared Plotly.NET feature, not a C#-only feature. The core Plotly.NET assembly owns the data representation, encoding helpers, serialization, trace objects, and F# Chart constructors. C# can already use those public .NET types and pass encoded nested objects through existing wrappers. Phase H3 adds convenient encoded overloads to Plotly.NET.CSharp.Chart.
The upstream context is Plotly.NET issue #441 and plotly.js 2.28.0. The wire representation contains dtype, base64 bdata, and optional shape; it is shared by both languages. This plan does not claim a measured performance improvement.
Updated on 2026-09-10 after merging dev at 41f2f88c (C# refactor PR #503) into plotly2.28 (PR #502) and completing the agreed follow-up scope. Status means present on this branch unless another ref is named explicitly. Integration and completion verification are recorded separately below.
| Layer / scope | Status in this checkout | Remaining work |
|---|---|---|
| Shared EncodedTypedArray, numeric factories, JSON representation | Implemented; C# factory syntax compiled in regression tests and documented | Reuse the shared type for further wrappers |
| Bundled plotly.js 2.28.0 and selected trace fields (A–G2) | Implemented | Preserve existing serialization and precedence coverage |
| Selected foundational F# chart constructors (H1) | Implemented and committed | No repeat implementation; exclusions are listed below |
| Selected derived F# constructors (H2) | Implemented and committed | No repeat implementation |
| C# direct encoded chart overloads (H3) | Eight overloads in split files with C# regression tests and documented examples | Further families remain in the separately scoped backlog |
| Encoded dimensions | Shared Dimension support, F#/C# parallel pairs, and C# encoded SPLOM are tested | No work remaining in the selected dimension scope |
| Encoded Sankey flow data | Shared node/link support, existing C# wrapper, and init/style precedence are tested | No work remaining in the selected nested-data scope |
| User documentation for encoded arrays | F# and compiled C# examples, scope/limits, and script loading are documented; docs build and strict reevaluation passed | No work remaining in the selected documentation scope |
The structural F# chart split and C# chart split are separate plans. Their completion does not imply C# encoded-array coverage or full plotly.js feature parity.
The earlier plan contained contradictory pending/complete notes. The following records the implemented scope and its exceptions without scheduling it again.
| Package | Implemented scope | Commits |
|---|---|---|
| A | Bundle bump, globals/resources, upstream 2.28 scaffold | 62a96500 |
| B | Scatter metadata and error arrays | 43ff9869 |
| C | Bar/Funnel/Waterfall trace fields | 9c7d1bdd |
| D | Distribution, finance, and SPLOM trace fields | f70dea0b |
| E | Matrix trace fields; Image metadata only | 97de944e |
| F | 3D coordinates, vectors, topology, values, and metadata | 343e31e4 |
| G1 | Polar, geo/mapbox, ternary, and Smith trace fields | 81bd99fd |
| G2 | Carpet/domain trace fields; not nested Sankey flow arrays | 8a9fcb64 |
| H1-A | Explicit Scatter(xEncoded, yEncoded, mode, ...) overload | 73965294 |
| H1-B | Point, Line, Spline, Bubble, Range, Area, SplineArea, StackedArea | b5767af5 |
| H1-C | Bar, Funnel, Waterfall roots under the reset design, including Waterfall width support | 02df1fad |
| H1-D | Histogram, BoxPlot, Violin, OHLC, Candlestick | 4913748a |
| H1-D-Splom | Encoded Dimension values and Splom(keyValuesEncoded = ...) | ed86f94d |
| H1-E | Histogram2D, Histogram2DContour, Heatmap, Contour | 62e9161c |
| H1-F | Scatter3D, Surface, Mesh3D, Cone, StreamTube, Volume, IsoSurface | 045a2b63 |
| H1-G | Selected subplot/domain roots listed below | 1d8e9e54, 73965294 |
| H2 | Selected derived constructors listed below | c9446e58 |
37006fd9 and 5edcbb17 record the earlier optional-parameter prototype. Later commits established the preferred explicit-overload design.
H1-G covers BarPolar, Pie, FunnelArea, Sunburst, Treemap, Icicle, ChoroplethMap, ChoroplethMapbox, DensityMapbox, ScatterPolar, ScatterGeo, ScatterMapbox, ScatterTernary, ScatterSmith, Carpet, ScatterCarpet, and ContourCarpet.
H2 adds StackedBar, Column, StackedColumn, PointDensity, StackedFunnel; Point3D, Line3D, Bubble3D; carpet Point/Line/Spline/Bubble; Doughnut; geo/mapbox Point/Line/Bubble; polar Point/Line/Spline/Bubble; Smith and ternary Point/Line/Bubble. H1-B already covers the earlier scatter/area conveniences.
Encoded dimensions are implemented in Dimensions.fs, and the F# SPLOM overload is in Chart2D_Splom.fs. Existing Splom(dimensions, ...), ParallelCoord(dimensions, ...), and ParallelCategories(dimensions, ...) can carry encoded dimension values, including through their existing C# wrappers. A missing pair convenience is not a missing encoding capability.
Historical verification recorded for H1/H2: runTestsCore, 933 passing. The full clean runTestsAll pipeline passed for refactor merge 51c744b0 on 2026-09-10: core tests 945 passed, C# tests 105 passed, and ImageExportTests 6 passed with 2 already marked pending. Those C# tests covered the plain wrapper surface; the current integration adds explicit regression coverage for the moved encoded and domain additions.
Verification for the resolved dev → plotly2.28 merge on 2026-09-10: full clean ./build.cmd runTestsAll passed with 958 core tests, 123 C# tests, and 6 ImageExportTests passed / 2 already pending. The 18 new C# cases in htmlcodegen/UpstreamFeatures/PlotlyJS228Tests.cs cover all 11 moved additions and the existing nested-object Sankey path. Expected data/layout came from actual C# chart rendering through the canonical baseline harness, which was restored afterwards. A read-only comparison confirmed preservation of all 99 original branch C# methods and all 88 dev methods. The resolved F# console was also type-checked with FSI. No new browser-rendering verification is claimed by this merge.
The following commits are already ancestors of the plotly2.28 branch. The merge retains their implementations while adopting the C# file split from dev; do not reimplement or cherry-pick them again.
| Existing commit | Retained work | Integration concern |
|---|---|---|
| f1e362a4 | Eight C# encoded overloads: Scatter, Bar, StackedBar, Column, StackedColumn, Heatmap, Histogram2D, Scatter3D | Moved out of the removed umbrella files into current partial files, preserving signatures and forwarding calls |
| d91fe84a | Shared Sankey node/link encoded fields; also node alignment | Review nested-field behavior; node alignment is a separate upstream feature, not a prerequisite for encoding |
| 1f775369 | F# ParallelCoord/ParallelCategories keyValuesEncoded conveniences | Reuse existing Dimension encoding; these are additive conveniences |
| fd862365 | Matching C# parallel-chart pair overloads and a plain Sankey helper with NodeAlign | Parallel wrappers depend on the shared F# conveniences; the plain Sankey helper is not an encoded overload |
| 263d7518 | Encoded-array documentation and Sankey examples | Adapt to selected integrated APIs and add compiled C# examples |
The accompanying 2.28 integration status records the same selected C# scope. The original feature commits did not add C# encoded tests; these are part of the merge validation. Neither a successful wrapper build nor F# tests prove C# forwarding behavior across all families.
Keep the removed umbrella files deleted and all overloads grouped in their per-chart files. Unrelated existing changes on PR #502 remain outside the conflict-resolution scope.
This self-contained follow-up closes the selected 2.28 scope after the refactor integration:
Additional C# chart families remain the separately scoped backlog below.
Final verification on 2026-09-10: full clean ./build.cmd runTestsAll passed with 960 core tests, 126 C# tests, and 6 ImageExport tests passed / 2 already pending. ./build.cmd BuildDocs completed, followed by successful strict reevaluation of the edited pages with dotnet fsdocs build --eval --strict --properties Configuration=Release --parameters fsdocs-package-version 6.0.0. This also verified the installation-example formatting fix in docs/index.fsx. The guide's C# examples are compiled in EncodedArrayExamplesTests.cs. Browser checks for Scatter, a 2x3 Heatmap, nested Sankey, SPLOM, and four Virtual-WebGL charts passed; environment, scope, and observations are recorded in the 2.28 integration status.
Each package includes implementation and its tests in the same independently buildable commit. Mark it done only after integration and verification on the working branch. The packages below define an initial C# milestone plus separate shared-core/convenience follow-ups; they do not require mirroring every F# overload.
Next 1–3 cover exactly the eight existing C# candidate methods. This is the initial H3 implementation milestone, not full F# chart parity. Additional roots are tracked separately below.
Integration retains the shared implementation and C# coverage for node positions and link source/target/value. The completion pass adds shared fixtures and tests for init and style collisions across all nine encoded node/link fields, verifies plain labels/alignment survive, and rejects duplicate JSON properties. The style fixture starts from existing objects to cover replacement of earlier values.
Integration retains both pair conveniences and C# serialization/option-forwarding tests. The completion pass adds a C# test through the existing SPLOM wrapper, covering encoded dimension values, replacement of plain values, labels, axis matching, marker color, and diagonal/upper-half options. No new SPLOM wrapper is needed.
These are additional family-sized packages, not prerequisites for calling the initial eight-wrapper milestone complete. Each selected package must include C# compilation and serialization tests before it is marked implemented.
| Candidate package | Constructors / behavior |
|---|---|
| Distribution and finance roots | Histogram, BoxPlot, Violin, OHLC, Candlestick |
| Other 2D roots | Funnel, Waterfall, Histogram2DContour, Contour |
| Other 3D roots | Surface, Mesh3D, Cone, StreamTube, Volume, IsoSurface |
| Geo and mapbox roots | ScatterGeo, ScatterMapbox, ChoroplethMap, ChoroplethMapbox, DensityMapbox |
| Other subplot roots | ScatterPolar, BarPolar, ScatterTernary, ScatterSmith |
| Domain and carpet roots | Pie, FunnelArea, Sunburst, Treemap, Icicle, Carpet, ScatterCarpet, ContourCarpet |
| Derived conveniences | Select useful existing H1-B/H2 helpers after their roots; do not automatically replicate every plain overload |
Prefer foundational roots before additional conveniences. Update this table with the chosen scope and commit references as packages are selected. Do not mark H3 as full parity while these gaps remain.
For each implementation package:
The initial H3 milestone is complete when the eight selected wrappers have C# tests, factory call syntax is verified, existing plain calls still compile, usage docs match the implementation, and the required verification is recorded. Shared Sankey support, parallel conveniences, and further C# families each retain their own status; none is implicitly completed by the C# file split or by this plan revision.
| Back | FazBrowse Home | New Git URL |