Releases: ScottPlot/ScottPlot
Releases · ScottPlot/ScottPlot
ScottPlot 5.0.45
- Candlestick: Improved performance for plots with large numbers of candles less than one pixel wide (#4483) @quantfreedom @VladislavPustovarov
- Blazor: Added UI event handlers with names consistent with those of other controls (#4480) @Saklut
- SignalConst: Improve automatic axis limit detection when X and Y data offsets are used (#4485) @matej-mnoucek
- Controls: Improve interactivity behavior by resetting drag events when interactivity is disabled (#4481) @hljlishen
- SignalConst: Deprecated the
SignalConst
type in favor of aSignal
with aSignalConstSource
data source (#4492) - Signal: Refactored multiple signal plot and data source types for improved performance, increased customization, and better consistency (#4492) @StendProg
- Text: Added a static
LabelStyle.RTLSupport
flag to enable support for right-to-left (RTL) languages (#4500, #4306) @StendProg @moranmono
ScottPlot 5.0.44
- Rendering: Prevent inversion of data area for extremely small plots (#3607)
- Generate: Created
AddSin()
andAddSinInPlace()
methods to facilitate test data generation (#3682) - FormsPlot: Improved the Visual Studio design time experience for users working on .NET Framework projects (#4425, #4362) @CoderPM2011
- CoordinateRange: Improve equality checking for infinite spans with reversed limits (#4441, #4436) @sunefred
- SVG: Significantly reduced the size of exported XML by preventing duplicate renders (#4441, #4436) @sunefred
- LineStyle: Added a
HandDrawn
flag with customizableHandDrawnJitter
andHandDrawnSegmentLength
to create XKCD-style plots (#4435, #3239) @sdpenner - SignalConst: Exposed
Data
so users may access offset configuration settings (#4440, #4253) @matej-mnoucek - VectorField: Added
MaximumArrowLength
property to allow arrow lengths to be customized (#3763) @hnMel - Signal: Reduced render artifacts for high density overlapping data by reducing pixel overlap (#4050, #3665) @StendProg
- Label: Added border radius properties to customize corner curvature of labels and plottables with label styles (#4099)
- Controls: Added
LostFocusAction
to abort mouse drags if they are interrupted by Alt+Tab or other events that lose window focus (#4103) @Max-i-m - Polygon: Improved performance and reduced anti-alias artifacts by preventing multiple overlapping drawings of identical lines (#4141) @HandsomeGoldenKnight
- Title: Added
FullFigureCenter
flag to allow titles to be centered in the figure instead of over the data area (#4455, #364) @jaguarxii - OHLC: Added check in initializer to force valid high/low range state (#4454) @CBrauer
- WpfPlot: Re-implemented
GetPlotPixelPosition()
andGetCurrentPlotPixelPosition()
(#4214, #3622) @wellsw @KroMignon - DataLogger: Narrowed the underlying data type from
IList<Coordinates>
toList<Coordinates>
to allowRemoveRange()
as seen in the cookbook (#4460) @Fruchtzwerg94 - Maui: Improve visual appearance of plots during panning (#4416, #4417, #4447) @King-Taz @KosmosWerner
- WinUI: Improved support for Windows platforms by upgrading to the latest SkiaSharp dependency and building for
windows10.0.19041
(#4258) @ArchieCoder @ProgrammerGuy76 @agneszitte @AzureGulf @Treppon - Callout: Improved automatic axis limit detection (#4358) @endeffects
- Axes: Added
SquareUnits(false)
overload to allow restoring default axis scaling behavior (#4366) @cvdevol - Axis Lines: Add
Minimum
andMaximum
properties to limit the size of the line along its axis (#4368) @nRoger-Env - Axes: Added
Plot.Axes.NumericTicksButton()
to revert changes made byDateTimeTicksBottom()
(#4438) @Cassar17 - Colormap: Added
GetImage()
to return aScottPlot.Image
of custom dimensions which may be returned as a byte array or saved to disk (#4371) - Tick Generator: Added
DateTimeManual
for placing ticks manually onDateTime
axes without having to useToOADate()
(#4383) - Grid: Added
Color
,LineWidth
, andLinePattern
properties for quickly setting major line styles of primary X and Y axes grid lines (#4384) - DataLogger: Exposed
HasNewData
to allow signaling that new renders are required after manually editing logger data (#4470, #4460) @Fruchtzwerg94 - Marker: Improved support for filled markers with opt-in outlines (#4387)
- Generate: Added
RangeWithStep()
andRangeWithCount()
as more explicit alternatives to the ambiguously namedRange()
method - Scatter: Filled areas previously only respected
OffsetX
but now respectOffsetY
too (#4433) - Controls: Modified
MouseDragZoom
to expose sensitivity properties to improve click-drag experiments for different platforms (#4443, #4416) @King-Taz @KosmosWerner - Controls: Improved mouse interactivity behavior for plots with inverted axes (#4471, #4110) @wi-fr
- Population: Use deterministic randomness for horizontal spread of makers to support pixel perfect reproducibility (#4477)
ScottPlot 5.0.43
- UserInputProcessor: Simplified how axis locking is achieved by adding
horizontal
andvertical
arguments toLeftClickDragPan()
andRightClickDragZoom()
- Maui: Improved deployment pipeline so the latest
ScottPlot.Maui
package is always available on NuGet (#1391) @KosmosWerner @King-Taz @cosmicDustOfLightLength - Candlestick Plot: Exposed
Data
for easier access to underlyingOHLC
candle data (#4385) @quantfreedom - Maui: Improved cursor-driven pan and zoom on Desktop platform targets (#4417, #4416) @KosmosWerner @King-Taz
- Candlestick Plot: Improved visibility of candles with zero price movement (#3337) @Lyakabynka @bukowa
- Ticks: Added an experimental
FinancialTickGenerator
for generating DateTime ticks from unevenly-spaced time data (#4385) - Financial Charting: Added experimental
FinancialTimeAxis
plottable as an alternative to using custom axes or tick generators (#4385) @quantfreedom @vladislavpweetsoft - Triangular Axis: Users may now
Add.TriangularAxis()
and use its methods to get Cartesian coordinates from points in triangular space (#4421, #4413, #4424) @manaruto - Bar: Exposed
Rect
,ErrorLines
, andAxisLimits
properties (#4423) @tiger2014 - Axes:
SquareUnits()
now usesSquareZoomOut
for console apps andSquarePreserveX
for interactive apps (#4422) @King-Taz @KosmosWerner - Bar: Improved support for bat plots with custom hatch patterns (#3386)
- Floating Axis: New plot type for displaying axes anywhere inside the data area (#3377) @ZTaiIT1025
- Bar: Improved behavior of horizontal bar plots with the
CenterLabel
flag enabled (#3533) @TheFizz - Generate: added
Sigmoidal()
method for creating sample data with a sigmoidal shape
ScottPlot 5.0.42
ScottPlot 5.0.41
- Controls: marked
Interaction
asObsolete
to encourage use of the newerUserInputProcessor
documented in all the demo apps. Users may still activate the old system by callingmyPlotControl.Interaction.Enable()
(#4322, #4224, #3186, #4053) - Ticks: Improved automatic tick generation for axes of extremely small plots (#4353, #4354) @StendProg @Cassar17
- CoordinateRange: Added a
Center
property to return the value halfway between the range boundary values (#4316, #4357) @idotta - Multiplot: Improve support for advanced layouts and add examples to cookbook (#4345)
- Colormap: Added
Default
property to provide quick access to a customizable standard colormap (defaults toMellowRainbow
) - Palette: Added
Default
property to provide quick access to a customizable standard Palette (defaults toCategory10
) - Bar: Use
LineStyle
andFillStyle
similar to other plottables and deprecate old property names - Histogram: Refactored to simplify creation of creating probability curves and cumulative probability histograms (#4287, #4367)
- Colormap: Refactor all
ScottPlot.Colormaps
to favor composition over inheritance and add extension methods toIColormap
(#4248) - WinUI: Improve support for .NET 8 platform targets (#4288, #4374) @vilgotf
- Scatter: Made all default strategies
public
to facilitate connecting line customization (#4346) - Interaction: Added
DoubleLeftClickBenchmark()
,LeftClickDragPan()
, andRightClickDragZoom()
helper methods for toggling default behavior (#4379) - Finance: Added
Add.BackgroundText()
methods to simplify the process of adding stock symbol information (#4396, #4395, #4385) @quantfreedom - Finance: Improve support for
List<OHLC>
andOHLC[]
data types (#4397) - Generate: Added
Generate.Financial.OHLCsByMinute()
to simplify creation of random financial data (#4397) - DataLogger: Add
Clear()
to the data logging plottable ands its corresponding data source (#4377) @h135558 - Cookbook: Improved recipes, reorganized chapters, and added platform switching to the website (#4392)
ScottPlot 5.0.40
- DataLogger: Added
Add()
overloads to be consistent the original DataLogger API (#4243, #4114) @drolevar @jpgarza93 - Fonts: Improve typeface caching to significantly improve Avalonia performance on Linux (#3439, #4250) @kebox7
- Generate: Improved
RandomNumbers()
to include lower boundary as described in XML docs (#4251, #4252) @aespitia @LeaFrock @ArchieCoder - LinePattern: Added
Name
property and added support for custom patterns (#4275, #4289) @CoderPM2011 - DataSources: Created
IDataSource
to standardize and simplify data access, render index management, and pixel/coordinate conversion (#3807, #4270) @RFBomb @StendProg - LinePlot: Added
CoordinateLine
property (#4277, #4274) @aespitia - Pie: Improved respect for
LineStyle
customizations (#7278) - Pie: Improved automatic axis limit behavior for pie charts with internal slice labels (#7278)
- Pie: Slices now have distinct
Label
andLegendText
properties (#3295, #4280) @LeaFrock @sterenas @Martin12350 - SignalXY: Fixed bug introduced in the last version that caused off-screen data to throw an ascending value exception (#4261, #4286) @RFBomb @StendProg
- Controls: Added strong naming by signing assemblies for the WPF, Maui, and Eto controls (#4295) @RFBomb
- OpenGL: Improve behavior of plots when grid lines are rendered beneath plottables (#4298) @StendProg
- OpenGL: Improve support for OpenGL controls on modern .NET using platform-specific OpenTK versions (#4301) @StendProg
- Coxcomb: Improved first slice orientation consistency (#4304, #4305) @johndoh
- Grid: Improved alternating fill grid appearance for live and interactive graphs (#4302, #4307) @StendProg @bradcb212
- SignalXY: Fixed bug causing plots with inverted horizontal axes to crash under specific conditions (#4313, #4315) @StendProg @lguelat
- CoordinateRange: Refactored to improve support for inverted ranges (#4316) @CoderPM2011
- Axes: Added a
Plot.Axes.TightMargins()
shortcut for setting autoscale margins to tightly fit the data - ContourLines: New plot type for displaying lines that mark points of equal elevation given a collection of 3D points (#4296, #2330, #3795, #4326) @jon-rizzo @StendProg
- Maui: Improved the .NET MAUI ScottPlot control and added quickstart documentation to the website (#4320, #4023, #4013, #4342) @KosmosWerner @ByteSore
- Radar: Improved rotational direction of labels (#4321, #4310) @CoderPM2011 @bry-decelles
- Axes: Added
Plot.Axes.MarginsX()
andPlot.Axes.MarginsY()
for changing margins in a single axis without changing the other (#4246) - Colormap: Added
Colormap.FromColors()
to generate colormaps using interpolated gradients between a user defined collection of colors (#4247, #4324) - Colormap: added
MellowRainbow
similar to Jet and Turbo but with mellow tones to improve appearance of thin lines on a white background (#4325) - ScaleBar: New plot type for communicating scale as a concise alternative to the axis frame (#4319, #4337, #4329) @CoderPM2011
- PixelLine: Added
Center
property (#4335, #4318) @brokoli777 - MultiPlot: New class for creating composite figures containing multiple distinct
Plot
figures (#3948) - Plot: Deprecated
GetImageHtml()
in favor ofGetPngHtml()
andGetSvgHtml()
(#4347)
ScottPlot 5.0.39
- Angle: Added support for common arithmetic operators
- PolarCoordinates: Added
FromCartesian()
andFromCartesian()
overloads to facilitate conversion between polar and Cartesian space (#4211) @CoderPM2011 - Pie: Added
Rotation
property (#4211) @CoderPM2011 - Pie: Improved label alignment (#4211) @CoderPM2011
- Pie: First slice now starts vertically (-90 degrees) instead of to the right (0 degrees) (#4211) @CoderPM2011
- Generate: Random seed uses
System.Random.Shared
on .NET platforms where it is available (#4217) @LeaFrock - Axes: Added
ClipLabel
option to prevent long labels from overlapping on very small plots (#4219) @drolevar - Plot: Improved performance when adding new plot objects by reducing complexity of color palette sampling (#4218) @0xfded @StendProg
- Colormap: Added
GetColor()
overload to get color of an item in a collection with an option to sample from a range of the colormap - Markers: Added optional
Colormap
so marker colors can be sampled from a colormap instead of assigned manually (#4143) - Angle: Added
FromFraction()
to produce angles represented by a fraction around the unit circle (#4208) - Color: Added constructor overloads to create colors from
SKColor
andSystem.Drawing.Color
(#4209) - Axes: Added
SetSpanX()
andSetSpanY()
for defining axis range size without changing the center position (#4221)
ScottPlot 5.0.38
- DataLogger: Merged in numerous additional features (optional circular buffer, X and Y offset, etc.) from the experimental DataLogger (#4085, #4114) @drolevar
- SVG: Improved correctness of exported SVG files to overcome a SkiaSharp bug that sometimes results in XML missing a closing tag (#4104, #4121) @KroMignon @aespitia @bclehmann @DDiggs91
- Generate: Added
Range()
to create a sequence of values between two numbers (#4122, #4119, #4179) @KroMignon @StendProg - Rendering: Improve behavior of plots using custom scale factors in situations of repeated renders (#4125) @BrianAtZetica
- Palette: Improved behavior of automatic color selection for new plottables added to the plot (#4105)
- Color: Added overload to allow constructing colors from hex strings (#4170, #4165) @aespitia @KroMignon @kebox7
- WinUI: Improved support and documentation for applications built using Uno Platform (#4123) @agneszitte
- Color: Added Hue, Saturation, and Luminance properties
- Colormap: Added
Colormap.GetColormaps()
to allow iterating over all available colormaps - Colormap: Added
Colormap.GetImage()
to generate a gradient image using a given colormap - Coordinates: Added
Position
andCoordinates
properties (#4185) @blouflashdb - Signal: Added
AlwaysUseLowDensityMode
for improved anti-aliased rendering in static plots (#4153) - Plot: Improved default
ToString()
implementation for the object returned when saving image files (#4154) - Plot: Added
Save()
overload which detects file format from filename extension (#4164) - Coordinates: Added
Coordinates.Zip()
for creating aCoordinates[]
from distinctxs[]
andys[]
arrays. - Lollipop: New plot type that displays values with a stem and a marker similar to a bar graph but with less visual clutter (#4193, #4183) @CoderPM2011
- Polar Axis: Added
Rotation
property to rotate the axis and coordinates it returns - Polar Axis: Added the ability to customize spoke label text (#4188)
- Polar Axis: Added a
SetSpokes()
overload that acceptsstring[]
to create new spokes and set their label text automatically - Polar Axis: Replaced
RegenerateSpokes()
andRegenerateCircles()
withSetSpokes()
andSetCircles()
(#4207) - Grid: Added support for fill colors to highlight spans between pairs of major grid lines (#4201, #4022) @CoderPM2011 @seeingistrue
- AxisSpan: Added
IsUnderMouse()
to improve API naming consistency with AxisLine (#4150) - AxisLimits: Added
Contains()
to allow quick checking whether a point is contained by the boundaries of the axis limits (#4161) - Radar: Refactored to use a
PolarAxis
to handle spoke and tick management and translation between polar and Cartesian space (#4207, #4187, #4186, #4055) - Controls: Made
IPlotControl.Menu
nullable so users creating their own controls are not required to create a menu system (#4203) @kebox7
ScottPlot 5.0.37
- Controls: A new
IPlotControl.UserInputProcessor
has been created to replaceIPlotControl.Interaction
which will be deprecated in a future release. The new system supports arbitrary inputs (not limited to mouse actions and key presses), offers extended ability to inject highly customizable ordered plot manipulation logic that respond to streamed inputs, and has been designed to facilitate automated UI testing. SetIPlotControl.UserInputProcessor.IsEnabled
totrue
to opt-in to this new event processor. (#4053, #3186, #3622) - Signal and SignalXY: Improve data source
GetNearestX()
accuracy (#4019) @StendProg - Maui: Created a
ScottPlot.Maui.MauiPlot
control to provide interactive plots in .NET Maui applications (#4013) @ByteSore - Style: Added
Plot.GetStyle()
andPlot.SetStyle()
for applying and customizing styles in theScottPlot.PlotStyles
namespace (#4025, #3955, #4037) @StendProg @kebox7 - AxisLimits: Improved accuracy and performance of
WithZoom()
(#4041) @idotta - Documentation: Added automatically generated API documentation to the website (#4040, #3822)
- Font: Improved documentation and testing for plot objects (like Legends) that use custom typefaces (#3830, #3825, #4060, #4043, #4057) @lasooch @kebox7
- Label:
ScottPlot.Label
has been renamed toScottPlot.LabelStyle
to better signal its purpose is to hold styling information rather than store text - Label: Improved support for custom horizontal alignment in multiline strings (#4045, #3958, #3859) @karlipl
- Fonts: Improve performance when automatic best font detection is enabled (#4049) @zxy874175242
- Controls: Added autoscale to default context menu (#4053)
- Axes: A polar plot axis can now be added with
myPlot.Add.PolarAxis()
and customized as seen in the cookbook (#4055, #3939) @CoderPM2011 - Axis lines and spans: Added
EnableAutoscale
flag to allow plottables to be ignored whenPlot.Axes.AutoScale()
is called (#4069, #4067) @KroMignon @andresod - SignalConst: Improved support for custom legend text (#4081, #4082) @KroMignon @fanshuxian
- SignalConst: Improve accuracy of the first point in low density mode (#4082, #4083, #4086, #4083) @StendProg @KroMignon
- SignalConst: Allowed markers to become visible by setting their shape without requiring users to define a non-zero size (#4082) @KroMignon
- Grid: Improved performance by reducing unnecessary allocations for ticks of invisible axes (#4087) @kebox7
- Ticks: Improved behavior of the numeric fixed interval tick generator to ensure the correct lowest tick is always rendered (#4089) @epegeot
- Ticks: Allow the numeric fixed interval tick generator interval to be defined as a
double
(#4090) @epegeot - Ticks: Add a custom tick label formatter property to the numeric fixed interval tick generator (#4090) @epegeot
- Ticks: Improved behavior of
NumericalFixedInterval
to ensure the correct lowest tick is always rendered (#4089) @epegeot - DataStreamer: Improved support for rotated plots (#4093, #4085) @drolevar @KroMignon @Jofstera
- Security: Removed outdated reference to
System.Text.Json
which contained CVE-2024-30105 (#4095, #4063) @SerTetora - Phaser: New plot type for displaying arrows to points in polar space (#4096, #3939) @CoderPM2011 @nilsakesson
- PlottableAdder: Exposed
Plot
so users can create methods that extendPlot.Add
which have access to thePlot
itself (#4109, #4107) @DDiggs91 - AxisManager: Improve
AutoScale()
support for inverted axes (#4110) @BrianAtZetica - Scatter: Added
ColorPositions
to allow placement of colors at specific X positions when using filled scatter plots (#4111) @CoderPM2011 - SignalXY: Improved support for rotated plots and added support for
XScale
to complimentYScale
(#4112, #4102) @BrianAtZetica
ScottPlot 5.0.36
- Fonts: Made typeface caching thread-safe to improve support for multi-threaded environments (#3940) @Hawkwind250
- Ticks: Added a custom
LabelFormatter
to DateTime axes which use fixed intervals (#3936) @Fruchtzwerg94 - Fonts: Enabled sub-pixel text positioning for improved character placement (#3937) @bforlgreen
- Axes: Improved automatic axis limit expansion for extremely large numbers (#3930) @CodeDevAM
- Statistics: Added
ScottPlot.Statistics.Descriptive
methodsMedian()
andPercentile()
- Population: Added a new Population plot type for displaying collections of values (#3944, #3676)
- IAxisLimitManager: Separated
GetAxisLimits()
intoGetRangeX()
andGetRangeY()
for improved customization and performance (#3946) @drolevar - Experimental: Added
Plottables.Experimental.DataStreamer2
plot type for displaying streaming data in a circular buffer (#3946) @drolevar - Rendering: Automatically re-render if a render invokes an event that requests it (#3952) @BrianAtZetica
- SVG: File encoding now supports text containing UTF8 characters (#3956, #3957) @aespitia
- Documentation: Added a sandbox .NET API project and quickstart section to the website (#3959, #3824) @aespitia
- Color: Added
ToColor()
andFromColor()
to simplify conversion betweenScottPlot.Color
andSystem.Drawing.Color
(#3964, ##3953) @aespitia - Console: Saved image path can be displayed by calling
myPlot.SavePng('demo.png', 600, 400).ConsoleWritePath()
(#3965, #3943) @aespitia - Rendering: Improved sharpness of axis frames, tick marks, and grid lines by disabling anti-aliasing by default and added
Plot.Axes.AntiAlias()
so users can customize this behavior (#3976) @bforlgreen - Signal: Added support for generic data sources in read-only lists (#3978, #3942) @sdpenner
- LinearRegression: Added overload that accepts
IEnumerable<Coordinates>
(#3982, #3981) @ANGADJEET @CoderPM2011 - Colormap: Added
GetColors()
for generating a given number of colors evenly spaced along a colormap (#3983, #3947) @CoderPM2011 - CoordinateLine: Added additional constructors for creating lines given a point and slope (#3987, #3986) @aalgrou
- DataLogger: Added
Clear()
andResetMinAndMaxValues()
to the data logger source class (#3993, #3969) @jpgarza93 - Controls: Improved behavior of middle-click-drag zooming over axis panels for plots using DPI scaling (#3994) @bforlgreen
- Style: Added
Plot.Axes.Hairline()
to enable axis frames, tick marks, and grid lines to render 1px wide regardless of scale factor (#3995) @bforlgreen - Axes: Display no ticks instead of throwing an exception if automatic DateTime ticks are used with invalid ranges (#4001) @githubkau
- SignalXY: Improve support for data sources containing zero-length arrays (#4000) @githubkau
- CoordinateRect: Added constructor that accepts
IAxes
(#4008, #3985) @CoderPM2011 - CoordinateRect: Fixed an issue that caused
BottomRight
to return incorrect coordinates (#4009, #3996) @CoderPM2011 - Cookbook: Added a demonstration of stacked filled line plots (#4010, #3967) @CoderPM2011 @MarkG008
- Benchmark: Improved text default alignment of double-click benchmark (#4014) @banncan
- SignalXY: Improved behavior of
MinRenderIndex
andMaxRenderIndex
(#4011) @StendProg - Project: Cut dependency on
System.Runtime.InteropServices.RuntimeInformation
(#3911) @swaitvor @chhh - Legend: Added
IsVisible
property toLegendItem
to customize visibility of items in manual legends (#3931) @cataclism - Signal: Exposed
Data
property setter so users can replace theISignalSource
without resetting the plottable (#3932) @danieljfarrell @bclehmann - Heatmap: Exposed
Intensities
setter to allow users to replace heatmap data with a 2D array of a different size (#3941) @sdpenner - Axes: Added
Plot.Axes.Link()
to simplify sharing axis limits between multiple plots or plot controls (#4003) - Blazor: Added automatic resizing options to the in-browser cookbook (#3710, #3664) @KroMignon
- Axis Spans: Improved visibility of extremely narrow spans (#4017, #3968) @CoderPM2011
- Generate: Added
RandomNormalNumber()
that returns a single value to complimentRandomNormal()
which returns a collection (#4018, #3980) @CoderPM2011 - Axis Lines: Offset label according to the panel offset to improve appearance on multi-axis plots (#1766) @fuxinsen @mengfanmin123