Starting from 2.0.0, Versions of Plotly.NET and expansion packages are decoupled, meaning this single realease notes page does not work anymore.
For the individual package release notes, please refer to these files:
Plotly.NET finally has reached all milestones for 2.0 and is ready for a stable release.
This release is the culmination of almost 2 years of work in >500 commits by 17 contributors.
Here is an attempt to visualize the history of these changes in a few seconds:
(made with gource)
All APIs have changed significantly - this release is incompatible with 1.x and many 2.x-preview/beta versions.
TL;DR
- All plotly chart/trace types!
- Unified API!
- chart rendering in notebooks!
- programmatic static image export!
- Exhaustive docs!
- We have a discord server, feel free to ask questions there!
Core library
General
- The API layer model has refined and used for every type of plotly object abstraction. In brief,
- There are 5 main categories of abstractions:
Trace
(chart data and type),Layout
(non-data chart styling),Config
(render options),DisplayOptions
(html display options),StyleParam
(DSL for styling options) - Many properties used in these levels are themselves objects, which are in the respective
*Objects
namespace (e.g.Geo
, which determines map layout of geo traces is an object on theLayout
and therefore in theLaoutObjects
namespace.) - every object is based on
DynamicObj
and its properties can therefore be further customised by dynamic member assignment. Therefore, every plotly property can be set manually, even those which do not have direct abstractions.
- There are 5 main categories of abstractions:
- There are now several
Trace
types for each kind of subplot (Trace2D
,Trace3D
, etc.) and eqivalentChart
types (Chart2D
,Chart3D
, etc). while not visible from the top level api (everything kan be accessed via the unifiedChart
API), this greatly improves correct multi chart layouting. - There are 3 ways of creating charts with increasing level of customization:
- The
Chart
API as a unified API surface for chart creation and stylingChart.<ChartType>
(e.g.Chart.Point
) for chart creation from data and some chart specific styling optionsChart.with<Style or object>
(e.g.Chart.withXAxisStyle
) for styling of chart objects
- Creation of Chart objects by manually creating
Trace
,Layout
andConfig
objects with many more optional customization parameters - Exclusive usage of
DynamicObj
- you can translate any plotly.js javascript with this method.
- The
Chart/Trace abstractions
You can create the following Charts with Plotly.NET's API (and many more by combining them):
-
Cartesian 2D (
Chart2D
):Scatter
(Point, Line, Spline, Bubble, Range, Area, SplineArea, StackedArea)Funnel
Waterfall
Bar
(Bar, Column, StackedBar, StackedColumn)Histogram
Histogram2D
Histogram2DContour
PointDensity
BoxPlot
Violin
Heatmap
(Heatmap, AnnotatedHeatmap)Image
Contour
OHLC
(OHLC, CandleSticks)Splom
-
Cartesian 3D (
Chart3D
):Scatter3D
(Point3D, Line3D, Bubble3D)Surface
Mesh3D
Cone
StreamTube
Volume
IsoSurface
-
Polar (
ChartPolar
):ScatterPolar
(PointPolar, LinePolar, SplinePolar, BubblePolar)BarPolar
-
Maps (
ChartMap
):ChoroplethMap
ChoroplethMapbox
ScatterGeo
(PointGeo, LineGeo, BubbleGeo)ScatterMapbox
(PointMapbox, LineMapbox, BubbleMapbox)DensityMapbox
-
Ternary (
ChartTernary
):ScatterTernary
(PointTernary, LineTernary, SplineTernary, BubbleTernary)
-
Carpet (
ChartCarpet
):Carpet
ScatterCarpet
(PointCarpet, LineCarpet, SplineCarpet, BubbleCarpet)ContourCarpet
-
Domain (
ChartDomain
)Pie
(Pie, Doughnut)FunnelArea
Sunburst
Treemap
ParallelCoord
ParallelCategories
Sankey
Table
Indicator
Icicle
-
Smith (
ChartSmith)
ScatterSmith
(PointSmith, LineSmith, BubbleSmith)
Plotly.NET.Interactive
You can directly render charts as html cell output with the dotnet interactive kernel:
Plotly.NET.ImageExport
This library provides an interface for image rendering engines to consume plots and create static image files (PNG, JPG, SVG), as well as a reference implementation using PuppeteerSharp to render charts with headless chromium.
Fsharp.Plotly joined the Plotly family and will from now on be released under Plotly.NET
Breaking changes compared to 1.x.x / previous 2.0.0 alpha/beta/preview versions:
- Breaking: Fix keys values order for bar charts
- Breaking: fix color assignment of pie and doughnut charts
- Breaking: Chart methods now have static type annotations, which may lead to incompatibilities in some cases
- Breaking: Rename ChartDescription type:
Plotly.NET.ChartDescription.Description
->Plotly.NET.ChartDescription
- Possibly breaking: target netstandad 2.0
- Breaking: Many functions of the Chart API have been changed to be in lower camelCase (e.g
Chart.Show
->Chart.show
,Chart.withX_Axis
->Chart.withXAxis
, etc.) see full set of changes in that category here, thanks @WhiteBlackGoose - Breaking: Many Parameters of
init
andstyle
functions have been changed to PascalCase, this is ongoing and will be breaking eregularily until unified. - SubPlotIds are now unified under the
StyleParam.SubPlotId
type which is used to assign subplots anchors (e.g. scenes for 3d charts, polar for polar charts) This change will be reflectes in trace type modeling in a later release. - Breaking: Layout and trace object abstractions are now in new namespaces:
Plotly.NET.LayoutObjects
/Plotly.NET.TraceObjects
- Breaking: every argument/parameter concerned with color has been changed to use the new Color type isntead of a plain string.
- Breaking: The underlying plotly.js version is now pinned at 2.6.3
- Breaking: POC of multivalue support (breaks Bar charts)
Major Additions:
- Add kernel formatting extension for dotnet interactive notebooks (thanks @WalternativeE)
- Greatly improve C# interop
- Add the Plotly.NET.ImageExport project - Render Plotly.NET charts as static images
- Use a statically typed color representation that is compatible with all ways plotly uses colors - thanks @muehlhaus
- Add a Templating and global default system
Plotly.NET now has 100% trace coverage! New Charts:
- Refactor Chart.Stack into:
- Chart.Grid: Uses the grid object of plotly.js to generate various types of subplot grids
- Chart.SingleStack: Basically Chart.Grid with one Column
- Add Sunburst Chart
- Add Treemap Chart
- Add OHLC Chart
- Add option to render all charts derived from the scatter trace type via WebGL as scattergl trace
- Add Waterfall Chart
- Add ScatterGeo, PointGeo, LineGeo Charts
- Add HeatmapGL, thanks @Joott]
- Add Funnel Chart, thanks @Joott]
- Add FunnelArea Chart, thanks @Joott
- Add all Mapbox Charts:
- ScatterMapbox (and derived PointMapbox and LineMapbox)
- ChoroplethMapbox
- DensityMapbox
- Add all Polar Charts and related layout properties :
- ScatterPolar (and derived PointPolar, LinePolar, SplinePolar, BubblePolar)
- BarPolar
- Polar object
- Angular and RadialAxis
- Add missing 3D charts and related layout options
- Scatter3d derived Point3d, Line3d, Bubble3d
- Cone
- StreamTube
- Volume
- IsoSurface
- Full Scene support
- Add Ternary Charts (ScatterTernary and derived PointTernary, LineTernary):
- Add image charts
- Add all carpet charts
- Carpet
- ScatterCarpet (and derived PointCarpet, LineCarpet, SplineCarpet, BubbleCarpet)
- ContourCarpet
- Add indicator charts
- Add icicle charts
- Add Chart.AnnotatedHeatmap
- Add Chart.PointDensity
- Add Smith traces, charts, and layout objects
Minor Additions/fixes:
- Add Rangesliders for linear Axis
- Improve jupyter notebook integration
- Updated Violin Chart
- Add Chart.withColorBar and Chart.withColorBarStyle to change the appearance of colorbars
- Add Stackgroup related parameters to all charts derived from the scatter trace
- Add new
Figure
type to interop with Dash/Kaleido - Add chart templates and related functions
- Fix multiple chart htmls not correctly rendering on the same page
- Add fslab chart template
- Add Legend creation properties and related functions
- Add Chart.withWithAdditionalHeadTags, Chart.withHeadTags, Chart.WithMathTex extensions for manipulating display options
- Fix Annotation type annotations (#78)
- Add name option with defaults for the upper and lower bound traces in range charts
- Add functionality and docs for using GeoJSON with geo charts #86
- Add functionality to customize Lower and upper labels of range charts #83
- Allow custom font family, thanks @pirrmann]
- Use custom attributes for all parameters for better C# interop
- Add ToString() and Convert() instance members to StyleParams for better C# interop
- Improve Trace type system
- Fix incorrect scale used in image export - thanks @pirrmann]
- Improve Chart.Grid
- Improve Distribution Charts
- fix data property of chart templates
- fix rangeslider props
- Full trace style args for 2D traces: #234, #220
- Add Layout Slider, thanks @amakhno!
- Full trace style args for 3D traces: #243
- Full trace style args for polar traces: #244
- Full trace style args for geo traces: #246
- Full trace style args for mapbox traces: #247
- Full trace style args for domain traces: #250
- All Chart constructors are now fully documented with XML docs
- Trace and Layout types have been expanded with important get/set/update methods (this is only important internally)
Other notable changes
These changes do not necessarily reflect changes on the usage layer, but should be attributed/noted nonetheless:
- 149 tests for html output generation have been added by @WhiteBlackGoose via #104, thanks!
- Improve C# interop by using null as default parameter for optional parameters in chart extensions and requiring qualified access for style parameters
Additional functionality:
Additional plots:
Additional functionality and plots thanks to external open source contributors:
- You can now add descriptional text to the chart html (thanks @kkkmail)
- Sankey and Candlestick Charts are now available (thanks @fwaris)
- Support .net framework 4.7
- Minor improvments
- Support netStandard 2.0
- Add new chart (SLOMP)
- Add new charts
- Add multiple axis support
- Add subplot support
- Fixed nuget package
- Add different ways to modify Charts
- Add Scatter3d line plots
- Add 3d Surface plots
- More awesome stuff coming...
- More 3d-Charts
- Multiple axis support
- Shapes
- Documentation and tutorial
- TraceObjects with interface implementation
- Extensions for Chart module
- Initial release