diff --git a/Plotly.NET.sln b/Plotly.NET.sln index ffbb0d4f..fa1bb8d0 100644 --- a/Plotly.NET.sln +++ b/Plotly.NET.sln @@ -140,6 +140,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "04_distribution-charts", "0 docs\distribution-charts\point-density.fsx = docs\distribution-charts\point-density.fsx docs\distribution-charts\splom.fsx = docs\distribution-charts\splom.fsx docs\distribution-charts\violin-plots.fsx = docs\distribution-charts\violin-plots.fsx + docs\distribution-charts\residual.fsx = docs\distribution-charts\residual.fsx EndProjectSection EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "01_chart-layout", "01_chart-layout", "{C7D0EF67-9A18-49DD-AC79-944E384BD8D0}" diff --git a/docs/distribution-charts/residual.fsx b/docs/distribution-charts/residual.fsx new file mode 100644 index 00000000..13cf5791 --- /dev/null +++ b/docs/distribution-charts/residual.fsx @@ -0,0 +1,74 @@ +(** +--- +title: Residual chart +category: Distribution Charts +categoryindex: 5 +index: 10 +--- +*) + +(*** hide ***) + +(*** condition: prepare ***) +#r "nuget: Newtonsoft.JSON, 13.0.3" +#r "nuget: DynamicObj, 7.0.1" +#r "nuget: Giraffe.ViewEngine.StrongName, 2.0.0-alpha1" +#r "../../src/Plotly.NET/bin/Release/netstandard2.0/Plotly.NET.dll" + +Plotly.NET.Defaults.DefaultDisplayOptions <- + Plotly.NET.DisplayOptions.init (PlotlyJSReference = Plotly.NET.PlotlyJSReference.NoReference) + +(*** condition: ipynb ***) +#if IPYNB +#r "nuget: Plotly.NET, {{fsdocs-package-version}}" +#r "nuget: Plotly.NET.Interactive, {{fsdocs-package-version}}" +#endif // IPYNB + +(** +# Residual chart + +[![Binder]({{root}}img/badge-binder.svg)](https://mybinder.org/v2/gh/plotly/plotly.net/gh-pages?urlpath=/tree/home/jovyan/{{fsdocs-source-basename}}.ipynb)  +[![Notebook]({{root}}img/badge-notebook.svg)]({{root}}{{fsdocs-source-basename}}.ipynb) + +*Summary:* This example shows how to create a Residual (or Lollipop) chart in F#. + +Let's first create some data for the purpose of creating example charts: + +*) + +open Plotly.NET + +let ydata = + [9.;25.;-73.;-30.;3.;35.;-35.;9.;-3.;33.;17.;25.;-15.;38.;-2.;36.;29.;-23.;15.;19] +let mean = Seq.average ydata + +let xy = Seq.indexed ydata + +(** +## What is a Residual (Lollipop) Chart? + +A Residual or Lollipop chart is a type of chart that showcases the deviation of values to a reference value, often the **mean**, **median**, or a custom threshold. + +- Each observation is represented by a **dot** connected to the reference line by a **line segment**. +- This type of visualization is useful for identifying **patterns**, **outliers**, or **distribution skewness** in relation to a central value. +- This approach is also helpful when visualizing residuals in regression models to assess **SSR (Sum of Squared Residuals)**, or highlight deviations to measures like **R²**. +*) + +let residualChart = + Chart.Residual( + xy=xy, + referenceValue = mean, + MarkerColor = Color.fromString "purple", + LineColor = Color.fromString "blue", + ReferenceColor = Color.fromString "black" + ) + +(*** condition: ipynb ***) +#if IPYNB +residualChart +#endif // IPYNB + +(***hide***) +residualChart |> GenericChart.toChartHTML +(***include-it-raw***) + diff --git a/src/Plotly.NET/ChartAPI/Chart2D.fs b/src/Plotly.NET/ChartAPI/Chart2D.fs index 3be2daff..df425be0 100644 --- a/src/Plotly.NET/ChartAPI/Chart2D.fs +++ b/src/Plotly.NET/ChartAPI/Chart2D.fs @@ -6014,4 +6014,539 @@ module Chart2D = , ?Label: string , ?ShowGrid: bool ) = - Chart.Pareto(Seq.zip labels values, ?Name=Name, ?Label=Label, ?ShowGrid=ShowGrid) \ No newline at end of file + Chart.Pareto(Seq.zip labels values, ?Name=Name, ?Label=Label, ?ShowGrid=ShowGrid) + + /// Displays a residue Chart by displaying the y values in relation to the provided reference Values. + /// Sets the x coordinates of the plotted data. + /// Sets the y coordinates of the plotted data for the Y value. + /// Sets the y coordinates for reference Y value. + /// Sets the trace name of the Y values. The trace name appear as the legend item and on hover + /// Sets the trace name of the reference Y values. The trace name appear as the legend item and on hover + /// Sets the name of the legendgroup for the data distribution trace of this plot. + /// Sets the name of the legendgroup for the reference trace of this plot. + /// Determines whether or not an To show markers for each datum. + /// Determines whether or not an item corresponding to this trace is shown in the legend. + /// Sets a text associated with each datum for the Y values. + /// Sets individual text for each datum for the Y values. + /// Sets the position of text associated with each datum + /// Sets the position of text associated with individual datum + /// Sets the color of the marker for the Y values. + /// Sets the colorscale of the marker for the Y values. + /// Sets the outline of the marker for the Y values. + /// Sets the marker symbol for each datum for the Y values. + /// Sets the marker symbol for each individual datum for the Y values. + /// Sets the marker (use this for more finegrained control than the other marker-associated arguments) for the Y values. + /// Sets the size of the datapoint markers for the Y values. + /// Sets the color of the line for the Y values. + /// Sets the colorscale of the line for the Y values. + /// Sets the width of the line for the Y values. + /// sets the drawing style of the line for the Y values. + /// Sets the line (use this for more finegrained control than the other line-associated arguments) for the Y values. + /// Sets if the reference Line should be visible. + /// Sets the line (use this for more finegrained control than the other line-associated arguments) for the reference Y values. + /// Sets the width of the line for the reference Y values. + /// Sets the color of the line for the reference Y values. + /// Sets a text associated with each datum for the reference Y values. + /// Sets individual text for each datum for the reference Y values. + /// Sets the position of text associated with each reference datum. + /// Sets the position of text associated with each individual reference datum + /// Sets the font used for `text` in Text. + /// If set to false, ignore the global default settings set in `Defaults` + [] + static member Residual + ( + x: seq<#IConvertible>, + y: seq<#IConvertible>, + reference: seq<#IConvertible>, + ?Name: string, + ?ReferenceName: string, + ?LegendGroupData: string, + ?LegendGroupReference: string, + ?ShowMarkers: bool, + ?ShowLegend: bool, + ?Text: #IConvertible, + ?MultiText: seq<#IConvertible>, + ?TextPosition: StyleParam.TextPosition, + ?MultiTextPosition: seq, + ?MarkerColor: Color, + ?MarkerColorScale: StyleParam.Colorscale, + ?MarkerOutline: Line, + ?MarkerSymbol: StyleParam.MarkerSymbol, + ?MultiMarkerSymbol: seq, + ?Marker: Marker, + ?MarkerSize: int, + ?LineColor: Color, + ?LineColorScale: StyleParam.Colorscale, + ?LineWidth: float, + ?LineDash: StyleParam.DrawingStyle, + ?Line: Line, + ?ShowReference: bool, + ?ReferenceLine: Line, + ?ReferenceWidth: int, + ?ReferenceColor: Color, + ?ReferenceText: #IConvertible, + ?MultiReferenceText: seq<#IConvertible>, + ?ReferenceTextPosition: StyleParam.TextPosition, + ?MultiReferenceTextPosition: seq, + ?TextFont: Font, + ?UseDefaults: bool + ) = + + let useDefaults = + defaultArg UseDefaults true + + let referenceName = defaultArg ReferenceName "Reference Line" + + // if text position or font is set than show labels (not only when hovering) + let changeMode = + let isShowMarker = + match ShowMarkers with + | Some isShow -> isShow + | Option.None -> false + + StyleParam.ModeUtils.showText (TextPosition.IsSome || TextFont.IsSome) + >> StyleParam.ModeUtils.showMarker (isShowMarker) + + let showReference = + let showBool = + match ShowReference with + | Some showRef -> showRef + | None -> true + if showBool then + StyleParam.Visible.True + else + StyleParam.Visible.False + + let markerSize = defaultArg MarkerSize 10 + + let (data,pointS) = + Seq.zip3 x y reference + |> Seq.collect(fun (x,y,refV) -> + [ + (x,refV),0 + (x,y),markerSize + (x,refV),0 + ] + ) + |> Array.ofSeq + |> Array.unzip + + let (x1,y1) = Array.unzip data + + let marker = + defaultArg + Marker + (TraceObjects.Marker.init( + MultiSize=pointS, + Opacity=1., + ?Color = MarkerColor, + ?Colorscale = MarkerColorScale, + ?Outline = MarkerOutline, + ?Symbol = MarkerSymbol, + ?MultiSymbol = MultiMarkerSymbol + )) + + let trace = + Chart.Scatter( + x = x1, + y = y1, + mode = changeMode StyleParam.Mode.Lines_Markers, + Opacity = 1., + Marker = marker, + ?Name = Name, + ?ShowLegend = ShowLegend, + ?Text = Text, + ?MultiText = MultiText, + ?TextPosition = TextPosition, + ?MultiTextPosition = MultiTextPosition, + ?LineColor = LineColor, + ?LineColorScale = LineColorScale, + ?LineWidth = LineWidth, + ?LineDash = LineDash, + ?Line = Line + ) + |> GenericChart.mapTrace ( + Trace2DStyle.Scatter( + ?LegendGroup = LegendGroupData + ) + ) + + let referenceLine = + Trace2D.initScatter( + Trace2DStyle.Scatter( + X = x, + Y = reference, + Mode = StyleParam.Mode.Lines, + ?Name = Some referenceName, + ?Visible = Some showReference, + ?ShowLegend = ShowLegend, + ?Text = ReferenceText, + ?MultiText = MultiReferenceText, + ?TextPosition = ReferenceTextPosition, + ?MultiTextPosition = MultiReferenceTextPosition, + ?Line = ReferenceLine, + ?LegendGroup = LegendGroupReference + ) + ) + |> TraceStyle.Marker( + Color = defaultArg ReferenceColor (Plotly.NET.Color.fromString "rgba(0, 0, 0, 1)"), + Size = defaultArg ReferenceWidth 10 + ) + + GenericChart.ofTraceObjects + useDefaults + [ + yield! (GenericChart.getTraces trace) + referenceLine + ] + + + /// Displays a residue Chart by displaying the y values in relation to the provided reference Values. + /// Sets the x and y coordinates of the plotted data. + /// Sets the y coordinates for reference Y value. + /// Sets the trace name of the Y values. The trace name appear as the legend item and on hover + /// Sets the trace name of the reference Y values. The trace name appear as the legend item and on hover + /// Sets the name of the legendgroup for the data distribution trace of this plot. + /// Sets the name of the legendgroup for the reference trace of this plot. + /// Determines whether or not an To show markers for each datum. + /// Determines whether or not an item corresponding to this trace is shown in the legend. + /// Sets a text associated with each datum for the Y values. + /// Sets individual text for each datum for the Y values. + /// Sets the position of text associated with each datum + /// Sets the position of text associated with individual datum + /// Sets the color of the marker for the Y values. + /// Sets the colorscale of the marker for the Y values. + /// Sets the outline of the marker for the Y values. + /// Sets the marker symbol for each datum for the Y values. + /// Sets the marker symbol for each individual datum for the Y values. + /// Sets the marker (use this for more finegrained control than the other marker-associated arguments) for the Y values. + /// Sets the size of the datapoint markers for the Y values. + /// Sets the color of the line for the Y values. + /// Sets the colorscale of the line for the Y values. + /// Sets the width of the line for the Y values. + /// sets the drawing style of the line for the Y values. + /// Sets the line (use this for more finegrained control than the other line-associated arguments) for the Y values. + /// Sets if the reference Line should be visible. + /// Sets the line (use this for more finegrained control than the other line-associated arguments) for the reference Y values. + /// Sets the width of the line for the reference Y values. + /// Sets the color of the line for the reference Y values. + /// Sets a text associated with each datum for the reference Y values. + /// Sets individual text for each datum for the reference Y values. + /// Sets the position of text associated with each reference datum. + /// Sets the position of text associated with each individual reference datum + /// Sets the font used for `text` in Text. + /// If set to false, ignore the global default settings set in `Defaults` + [] + static member Residual + ( + xy: seq<#IConvertible*#IConvertible>, + reference: seq<#IConvertible>, + ?Name: string, + ?ReferenceName: string, + ?LegendGroupData: string, + ?LegendGroupReference: string, + ?ShowMarkers: bool, + ?ShowLegend: bool, + ?Text: #IConvertible, + ?MultiText: seq<#IConvertible>, + ?TextPosition: StyleParam.TextPosition, + ?MultiTextPosition: seq, + ?MarkerColor: Color, + ?MarkerColorScale: StyleParam.Colorscale, + ?MarkerOutline: Line, + ?MarkerSymbol: StyleParam.MarkerSymbol, + ?MultiMarkerSymbol: seq, + ?Marker: Marker, + ?MarkerSize: int, + ?LineColor: Color, + ?LineColorScale: StyleParam.Colorscale, + ?LineWidth: float, + ?LineDash: StyleParam.DrawingStyle, + ?Line: Line, + ?ShowReference: bool, + ?ReferenceLine: Line, + ?ReferenceWidth: int, + ?ReferenceColor: Color, + ?ReferenceText: #IConvertible, + ?MultiReferenceText: seq<#IConvertible>, + ?ReferenceTextPosition: StyleParam.TextPosition, + ?MultiReferenceTextPosition: seq, + ?TextFont: Font, + ?UseDefaults: bool + ) = + + let (x,y) = Seq.unzip xy + Chart.Residual + ( + x = x, + y = y, + reference = reference, + ?Name = Name, + ?ReferenceName = ReferenceName, + ?LegendGroupData = LegendGroupData, + ?LegendGroupReference = LegendGroupReference, + ?ShowMarkers = ShowMarkers, + ?ShowLegend = ShowLegend, + ?Text = Text, + ?MultiText = MultiText, + ?TextPosition = TextPosition, + ?MultiTextPosition = MultiTextPosition, + ?MarkerColor = MarkerColor, + ?MarkerColorScale = MarkerColorScale, + ?MarkerOutline = MarkerOutline, + ?MarkerSymbol = MarkerSymbol, + ?MultiMarkerSymbol = MultiMarkerSymbol, + ?Marker = Marker, + ?MarkerSize = MarkerSize, + ?LineColor = LineColor, + ?LineColorScale = LineColorScale, + ?LineWidth = LineWidth, + ?LineDash = LineDash, + ?Line = Line, + ?ShowReference = ShowReference, + ?ReferenceLine = ReferenceLine, + ?ReferenceWidth = ReferenceWidth, + ?ReferenceColor = ReferenceColor, + ?ReferenceText = ReferenceText, + ?MultiReferenceText = MultiReferenceText, + ?ReferenceTextPosition = ReferenceTextPosition, + ?MultiReferenceTextPosition = MultiReferenceTextPosition, + ?TextFont = TextFont, + ?UseDefaults = UseDefaults + ) + + + /// Displays a residue Chart by displaying the y values in relation to the provided reference Values. + /// Sets the x and y coordinates of the plotted data. + /// Sets the y coordinate for reference Y value. + /// Sets the trace name of the Y values. The trace name appear as the legend item and on hover + /// Sets the trace name of the reference Y values. The trace name appear as the legend item and on hover + /// Sets the name of the legendgroup for the data distribution trace of this plot. + /// Sets the name of the legendgroup for the reference trace of this plot. + /// Determines whether or not an To show markers for each datum. + /// Determines whether or not an item corresponding to this trace is shown in the legend. + /// Sets a text associated with each datum for the Y values. + /// Sets individual text for each datum for the Y values. + /// Sets the position of text associated with each datum + /// Sets the position of text associated with individual datum + /// Sets the color of the marker for the Y values. + /// Sets the colorscale of the marker for the Y values. + /// Sets the outline of the marker for the Y values. + /// Sets the marker symbol for each datum for the Y values. + /// Sets the marker symbol for each individual datum for the Y values. + /// Sets the marker (use this for more finegrained control than the other marker-associated arguments) for the Y values. + /// Sets the size of the datapoint markers for the Y values. + /// Sets the color of the line for the Y values. + /// Sets the colorscale of the line for the Y values. + /// Sets the width of the line for the Y values. + /// sets the drawing style of the line for the Y values. + /// Sets the line (use this for more finegrained control than the other line-associated arguments) for the Y values. + /// Sets if the reference Line should be visible. + /// Sets the line (use this for more finegrained control than the other line-associated arguments) for the reference Y values. + /// Sets the width of the line for the reference Y values. + /// Sets the color of the line for the reference Y values. + /// Sets a text associated with each datum for the reference Y values. + /// Sets individual text for each datum for the reference Y values. + /// Sets the position of text associated with each reference datum. + /// Sets the position of text associated with each individual reference datum + /// Sets the font used for `text` in Text. + /// If set to false, ignore the global default settings set in `Defaults` + [] + static member Residual + ( + xy: seq<#IConvertible*#IConvertible>, + referenceValue: #IConvertible, + ?Name: string, + ?ReferenceName: string, + ?LegendGroupData :string, + ?LegendGroupReference :string, + ?ShowMarkers: bool, + ?ShowLegend: bool, + ?Text: #IConvertible, + ?MultiText: seq<#IConvertible>, + ?TextPosition: StyleParam.TextPosition, + ?MultiTextPosition: seq, + ?MarkerColor: Color, + ?MarkerColorScale: StyleParam.Colorscale, + ?MarkerOutline: Line, + ?MarkerSymbol: StyleParam.MarkerSymbol, + ?MultiMarkerSymbol: seq, + ?Marker: Marker, + ?MarkerSize: int, + ?LineColor: Color, + ?LineColorScale: StyleParam.Colorscale, + ?LineWidth: float, + ?LineDash: StyleParam.DrawingStyle, + ?Line: Line, + ?ShowReference: bool, + ?ReferenceLine: Line, + ?ReferenceWidth: int, + ?ReferenceColor: Color, + ?ReferenceText: #IConvertible, + ?MultiReferenceText: seq<#IConvertible>, + ?ReferenceTextPosition: StyleParam.TextPosition, + ?MultiReferenceTextPosition: seq, + ?TextFont: Font, + ?UseDefaults: bool + ) = + + let (x,y) = Seq.unzip xy + let reference = Seq.map(fun x -> referenceValue) x + Chart.Residual + ( + x = x, + y = y, + reference = reference, + ?Name = Name, + ?ReferenceName = ReferenceName, + ?LegendGroupData = LegendGroupData, + ?LegendGroupReference = LegendGroupReference, + ?ShowMarkers = ShowMarkers, + ?ShowLegend = ShowLegend, + ?Text = Text, + ?MultiText = MultiText, + ?TextPosition = TextPosition, + ?MultiTextPosition = MultiTextPosition, + ?MarkerColor = MarkerColor, + ?MarkerColorScale = MarkerColorScale, + ?MarkerOutline = MarkerOutline, + ?MarkerSymbol = MarkerSymbol, + ?MultiMarkerSymbol = MultiMarkerSymbol, + ?Marker = Marker, + ?MarkerSize = MarkerSize, + ?LineColor = LineColor, + ?LineColorScale = LineColorScale, + ?LineWidth = LineWidth, + ?LineDash = LineDash, + ?Line = Line, + ?ShowReference = ShowReference, + ?ReferenceLine = ReferenceLine, + ?ReferenceWidth = ReferenceWidth, + ?ReferenceColor = ReferenceColor, + ?ReferenceText = ReferenceText, + ?MultiReferenceText = MultiReferenceText, + ?ReferenceTextPosition = ReferenceTextPosition, + ?MultiReferenceTextPosition = MultiReferenceTextPosition, + ?TextFont = TextFont, + ?UseDefaults = UseDefaults + ) + + + /// + /// Displays a residue Chart by displaying the y values in relation to the provided reference Values. + /// + /// + /// Sets the x coordinates of the plotted data. + /// Sets the y coordinates of the plotted data. + /// Sets the y coordinate for reference Y value. + /// Sets the trace name of the Y values. The trace name appear as the legend item and on hover + /// Sets the trace name of the reference Y values. The trace name appear as the legend item and on hover + /// Sets the name of the legendgroup for the data distribution trace of this plot. + /// Sets the name of the legendgroup for the reference trace of this plot. + /// Determines whether or not an To show markers for each datum. + /// Determines whether or not an item corresponding to this trace is shown in the legend. + /// Sets a text associated with each datum for the Y values. + /// Sets individual text for each datum for the Y values. + /// Sets the position of text associated with each datum + /// Sets the position of text associated with individual datum + /// Sets the color of the marker for the Y values. + /// Sets the colorscale of the marker for the Y values. + /// Sets the outline of the marker for the Y values. + /// Sets the marker symbol for each datum for the Y values. + /// Sets the marker symbol for each individual datum for the Y values. + /// Sets the marker (use this for more finegrained control than the other marker-associated arguments) for the Y values. + /// Sets the size of the datapoint markers for the Y values. + /// Sets the color of the line for the Y values. + /// Sets the colorscale of the line for the Y values. + /// Sets the width of the line for the Y values. + /// sets the drawing style of the line for the Y values. + /// Sets the line (use this for more finegrained control than the other line-associated arguments) for the Y values. + /// Sets if the reference Line should be visible. + /// Sets the line (use this for more finegrained control than the other line-associated arguments) for the reference Y values. + /// Sets the width of the line for the reference Y values. + /// Sets the color of the line for the reference Y values. + /// Sets a text associated with each datum for the reference Y values. + /// Sets individual text for each datum for the reference Y values. + /// Sets the position of text associated with each reference datum. + /// Sets the position of text associated with each individual reference datum + /// Sets the font used for `text` in Text. + /// If set to false, ignore the global default settings set in `Defaults` + [] + static member Residual + ( + x: seq<#IConvertible>, + y: seq<#IConvertible>, + referenceValue: #IConvertible, + ?Name: string, + ?ReferenceName: string, + ?LegendGroupData: string, + ?LegendGroupReference: string, + ?ShowMarkers: bool, + ?ShowLegend: bool, + ?Text: #IConvertible, + ?MultiText: seq<#IConvertible>, + ?TextPosition: StyleParam.TextPosition, + ?MultiTextPosition: seq, + ?MarkerColor: Color, + ?MarkerColorScale: StyleParam.Colorscale, + ?MarkerOutline: Line, + ?MarkerSymbol: StyleParam.MarkerSymbol, + ?MultiMarkerSymbol: seq, + ?Marker: Marker, + ?MarkerSize: int, + ?LineColor: Color, + ?LineColorScale: StyleParam.Colorscale, + ?LineWidth: float, + ?LineDash: StyleParam.DrawingStyle, + ?Line: Line, + ?ShowReference: bool, + ?ReferenceLine: Line, + ?ReferenceWidth: int, + ?ReferenceColor: Color, + ?ReferenceText: #IConvertible, + ?MultiReferenceText: seq<#IConvertible>, + ?ReferenceTextPosition: StyleParam.TextPosition, + ?MultiReferenceTextPosition: seq, + ?TextFont: Font, + ?UseDefaults: bool + ) = + + let reference = Seq.map(fun x -> referenceValue) x + Chart.Residual + ( + x = x, + y = y, + reference = reference, + ?Name = Name, + ?ReferenceName = ReferenceName, + ?LegendGroupData = LegendGroupData, + ?LegendGroupReference = LegendGroupReference, + ?ShowMarkers = ShowMarkers, + ?ShowLegend = ShowLegend, + ?Text = Text, + ?MultiText = MultiText, + ?TextPosition = TextPosition, + ?MultiTextPosition = MultiTextPosition, + ?MarkerColor = MarkerColor, + ?MarkerColorScale = MarkerColorScale, + ?MarkerOutline = MarkerOutline, + ?MarkerSymbol = MarkerSymbol, + ?MultiMarkerSymbol = MultiMarkerSymbol, + ?Marker = Marker, + ?MarkerSize = MarkerSize, + ?LineColor = LineColor, + ?LineColorScale = LineColorScale, + ?LineWidth = LineWidth, + ?LineDash = LineDash, + ?Line = Line, + ?ShowReference = ShowReference, + ?ReferenceLine = ReferenceLine, + ?ReferenceWidth = ReferenceWidth, + ?ReferenceColor = ReferenceColor, + ?ReferenceText = ReferenceText, + ?MultiReferenceText = MultiReferenceText, + ?ReferenceTextPosition = ReferenceTextPosition, + ?MultiReferenceTextPosition = MultiReferenceTextPosition, + ?TextFont = TextFont, + ?UseDefaults = UseDefaults + ) \ No newline at end of file