Skip to content

Commit fa62e1c

Browse files
committed
Add Chart.ScatterTernary, Chart.PointTernary, Chart.LineTernary
1 parent fba431e commit fa62e1c

3 files changed

Lines changed: 251 additions & 7 deletions

File tree

Lines changed: 230 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
1+
namespace Plotly.NET
2+
3+
open Plotly.NET.LayoutObjects
4+
open Plotly.NET.TraceObjects
5+
6+
open DynamicObj
7+
open System
8+
open System.IO
9+
10+
open GenericChart
11+
open StyleParam
12+
open System.Runtime.InteropServices
13+
open System.Runtime.CompilerServices
14+
15+
[<AutoOpen>]
16+
module ChartTernary =
17+
18+
[<Extension>]
19+
type Chart =
20+
21+
static member ScatterTernary
22+
(
23+
[<Optional;DefaultParameterValue(null)>] ?A : seq<#IConvertible>,
24+
[<Optional;DefaultParameterValue(null)>] ?B : seq<#IConvertible>,
25+
[<Optional;DefaultParameterValue(null)>] ?C : seq<#IConvertible>,
26+
[<Optional;DefaultParameterValue(null)>] ?Mode : StyleParam.Mode,
27+
[<Optional;DefaultParameterValue(null)>] ?Sum : #IConvertible,
28+
[<Optional;DefaultParameterValue(null)>] ?Labels : seq<#IConvertible>,
29+
[<Optional;DefaultParameterValue(null)>] ?Name : string,
30+
[<Optional;DefaultParameterValue(null)>] ?ShowLegend : bool,
31+
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol : StyleParam.Symbol,
32+
[<Optional;DefaultParameterValue(null)>] ?Color : Color,
33+
[<Optional;DefaultParameterValue(null)>] ?Opacity : float,
34+
[<Optional;DefaultParameterValue(null)>] ?TextPosition : StyleParam.TextPosition,
35+
[<Optional;DefaultParameterValue(null)>] ?TextFont : Font,
36+
[<Optional;DefaultParameterValue(null)>] ?Dash : StyleParam.DrawingStyle,
37+
[<Optional;DefaultParameterValue(null)>] ?Width : float
38+
39+
) =
40+
TraceTernary.initScatterTernary(
41+
TraceTernaryStyle.ScatterTernary(
42+
?A = A,
43+
?B = B,
44+
?C = C,
45+
?Mode = Mode,
46+
?Sum = Sum
47+
)
48+
)
49+
|> TraceStyle.TraceInfo(?Name=Name,?ShowLegend=ShowLegend,?Opacity=Opacity)
50+
|> TraceStyle.Line(?Color=Color,?Dash=Dash,?Width=Width)
51+
|> TraceStyle.Marker(?Color=Color,?Symbol=MarkerSymbol)
52+
|> TraceStyle.TextLabel(?Text=Labels,?Textposition=TextPosition,?Textfont=TextFont)
53+
|> GenericChart.ofTraceObject
54+
55+
static member ScatterTernary
56+
(
57+
abc,
58+
[<Optional;DefaultParameterValue(null)>] ?Mode : StyleParam.Mode,
59+
[<Optional;DefaultParameterValue(null)>] ?Sum : #IConvertible,
60+
[<Optional;DefaultParameterValue(null)>] ?Labels : seq<#IConvertible>,
61+
[<Optional;DefaultParameterValue(null)>] ?Name : string,
62+
[<Optional;DefaultParameterValue(null)>] ?ShowLegend : bool,
63+
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol : StyleParam.Symbol,
64+
[<Optional;DefaultParameterValue(null)>] ?Color : Color,
65+
[<Optional;DefaultParameterValue(null)>] ?Opacity : float,
66+
[<Optional;DefaultParameterValue(null)>] ?TextPosition : StyleParam.TextPosition,
67+
[<Optional;DefaultParameterValue(null)>] ?TextFont : Font,
68+
[<Optional;DefaultParameterValue(null)>] ?Dash : StyleParam.DrawingStyle,
69+
[<Optional;DefaultParameterValue(null)>] ?Width : float
70+
) =
71+
let a,b,c = Seq.unzip3 abc
72+
Chart.ScatterTernary(
73+
A = a ,
74+
B = b ,
75+
C = c ,
76+
?Mode = Mode ,
77+
?Sum = Sum ,
78+
?Labels = Labels ,
79+
?Name = Name ,
80+
?ShowLegend = ShowLegend ,
81+
?MarkerSymbol = MarkerSymbol,
82+
?Color = Color ,
83+
?Opacity = Opacity ,
84+
?TextPosition = TextPosition,
85+
?TextFont = TextFont ,
86+
?Dash = Dash ,
87+
?Width = Width
88+
)
89+
90+
static member PointTernary
91+
(
92+
[<Optional;DefaultParameterValue(null)>] ?A : seq<#IConvertible>,
93+
[<Optional;DefaultParameterValue(null)>] ?B : seq<#IConvertible>,
94+
[<Optional;DefaultParameterValue(null)>] ?C : seq<#IConvertible>,
95+
[<Optional;DefaultParameterValue(null)>] ?Sum : #IConvertible,
96+
[<Optional;DefaultParameterValue(null)>] ?Labels : seq<#IConvertible>,
97+
[<Optional;DefaultParameterValue(null)>] ?Name : string,
98+
[<Optional;DefaultParameterValue(null)>] ?ShowLegend : bool,
99+
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol : StyleParam.Symbol,
100+
[<Optional;DefaultParameterValue(null)>] ?Color : Color,
101+
[<Optional;DefaultParameterValue(null)>] ?Opacity : float,
102+
[<Optional;DefaultParameterValue(null)>] ?TextPosition : StyleParam.TextPosition,
103+
[<Optional;DefaultParameterValue(null)>] ?TextFont : Font
104+
) =
105+
106+
let changeMode = StyleParam.ModeUtils.showText (TextPosition.IsSome || TextFont.IsSome)
107+
108+
TraceTernary.initScatterTernary(
109+
TraceTernaryStyle.ScatterTernary(
110+
?A = A,
111+
?B = B,
112+
?C = C,
113+
Mode = changeMode StyleParam.Mode.Markers,
114+
?Sum = Sum
115+
)
116+
)
117+
|> TraceStyle.TraceInfo(?Name=Name,?ShowLegend=ShowLegend,?Opacity=Opacity)
118+
|> TraceStyle.Marker(?Color=Color,?Symbol=MarkerSymbol)
119+
|> TraceStyle.TextLabel(?Text=Labels,?Textposition=TextPosition,?Textfont=TextFont)
120+
|> GenericChart.ofTraceObject
121+
122+
static member PointTernary
123+
(
124+
abc,
125+
[<Optional;DefaultParameterValue(null)>] ?Labels : seq<#IConvertible>,
126+
[<Optional;DefaultParameterValue(null)>] ?Name : string,
127+
[<Optional;DefaultParameterValue(null)>] ?ShowLegend : bool,
128+
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol : StyleParam.Symbol,
129+
[<Optional;DefaultParameterValue(null)>] ?Color : Color,
130+
[<Optional;DefaultParameterValue(null)>] ?Opacity : float,
131+
[<Optional;DefaultParameterValue(null)>] ?TextPosition : StyleParam.TextPosition,
132+
[<Optional;DefaultParameterValue(null)>] ?TextFont : Font
133+
134+
) =
135+
let changeMode = StyleParam.ModeUtils.showText (TextPosition.IsSome || TextFont.IsSome)
136+
let a,b,c = Seq.unzip3 abc
137+
138+
TraceTernary.initScatterTernary(
139+
TraceTernaryStyle.ScatterTernary(
140+
A = a,
141+
B = b,
142+
C = c,
143+
Mode = changeMode StyleParam.Mode.Markers
144+
)
145+
)
146+
|> TraceStyle.TraceInfo(?Name=Name,?ShowLegend=ShowLegend,?Opacity=Opacity)
147+
|> TraceStyle.Marker(?Color=Color,?Symbol=MarkerSymbol)
148+
|> TraceStyle.TextLabel(?Text=Labels,?Textposition=TextPosition,?Textfont=TextFont)
149+
|> GenericChart.ofTraceObject
150+
151+
static member LineTernary
152+
(
153+
[<Optional;DefaultParameterValue(null)>] ?A : seq<#IConvertible>,
154+
[<Optional;DefaultParameterValue(null)>] ?B : seq<#IConvertible>,
155+
[<Optional;DefaultParameterValue(null)>] ?C : seq<#IConvertible>,
156+
[<Optional;DefaultParameterValue(null)>] ?Sum : #IConvertible,
157+
[<Optional;DefaultParameterValue(null)>] ?Labels : seq<#IConvertible>,
158+
[<Optional;DefaultParameterValue(null)>] ?Name : string,
159+
[<Optional;DefaultParameterValue(null)>] ?ShowLegend : bool,
160+
[<Optional;DefaultParameterValue(null)>] ?ShowMarkers : bool,
161+
[<Optional;DefaultParameterValue(null)>] ?Dash : StyleParam.DrawingStyle,
162+
[<Optional;DefaultParameterValue(null)>] ?Width : float,
163+
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol : StyleParam.Symbol,
164+
[<Optional;DefaultParameterValue(null)>] ?Color : Color,
165+
[<Optional;DefaultParameterValue(null)>] ?Opacity : float,
166+
[<Optional;DefaultParameterValue(null)>] ?TextPosition : StyleParam.TextPosition,
167+
[<Optional;DefaultParameterValue(null)>] ?TextFont : Font
168+
) =
169+
170+
let changeMode =
171+
let isShowMarker =
172+
match ShowMarkers with
173+
| Some isShow -> isShow
174+
| Option.None -> false
175+
StyleParam.ModeUtils.showText (TextPosition.IsSome || TextFont.IsSome)
176+
>> StyleParam.ModeUtils.showMarker (isShowMarker)
177+
178+
TraceTernary.initScatterTernary(
179+
TraceTernaryStyle.ScatterTernary(
180+
?A = A,
181+
?B = B,
182+
?C = C,
183+
Mode = changeMode StyleParam.Mode.Lines,
184+
?Sum = Sum
185+
)
186+
)
187+
|> TraceStyle.Line(?Color=Color,?Dash=Dash,?Width=Width)
188+
|> TraceStyle.TraceInfo(?Name=Name,?ShowLegend=ShowLegend,?Opacity=Opacity)
189+
|> TraceStyle.Marker(?Color=Color,?Symbol=MarkerSymbol)
190+
|> TraceStyle.TextLabel(?Text=Labels,?Textposition=TextPosition,?Textfont=TextFont)
191+
|> GenericChart.ofTraceObject
192+
193+
static member LineTernary
194+
(
195+
abc,
196+
[<Optional;DefaultParameterValue(null)>] ?Labels : seq<#IConvertible>,
197+
[<Optional;DefaultParameterValue(null)>] ?Name : string,
198+
[<Optional;DefaultParameterValue(null)>] ?ShowLegend : bool,
199+
[<Optional;DefaultParameterValue(null)>] ?ShowMarkers : bool,
200+
[<Optional;DefaultParameterValue(null)>] ?Dash : StyleParam.DrawingStyle,
201+
[<Optional;DefaultParameterValue(null)>] ?Width : float,
202+
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol : StyleParam.Symbol,
203+
[<Optional;DefaultParameterValue(null)>] ?Color : Color,
204+
[<Optional;DefaultParameterValue(null)>] ?Opacity : float,
205+
[<Optional;DefaultParameterValue(null)>] ?TextPosition : StyleParam.TextPosition,
206+
[<Optional;DefaultParameterValue(null)>] ?TextFont : Font
207+
) =
208+
let a,b,c = Seq.unzip3 abc
209+
210+
let changeMode =
211+
let isShowMarker =
212+
match ShowMarkers with
213+
| Some isShow -> isShow
214+
| Option.None -> false
215+
StyleParam.ModeUtils.showText (TextPosition.IsSome || TextFont.IsSome)
216+
>> StyleParam.ModeUtils.showMarker (isShowMarker)
217+
218+
TraceTernary.initScatterTernary(
219+
TraceTernaryStyle.ScatterTernary(
220+
A = a,
221+
B = b,
222+
C = c,
223+
Mode = changeMode StyleParam.Mode.Lines
224+
)
225+
)
226+
|> TraceStyle.Line(?Color=Color,?Dash=Dash,?Width=Width)
227+
|> TraceStyle.TraceInfo(?Name=Name,?ShowLegend=ShowLegend,?Opacity=Opacity)
228+
|> TraceStyle.Marker(?Color=Color,?Symbol=MarkerSymbol)
229+
|> TraceStyle.TextLabel(?Text=Labels,?Textposition=TextPosition,?Textfont=TextFont)
230+
|> GenericChart.ofTraceObject

src/Plotly.NET/Playground.fsx

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@
2727
#load "Margin.fs"
2828
#load "Domain.fs"
2929
#load "Shape.fs"
30-
#load "Hoverlabel.fs"
3130
#load "Annotation.fs"
3231
#load "LayoutGrid.fs"
3332
#load "Legend.fs"
33+
#load "Hoverlabel.fs"
3434
#load "TickFormatStop.fs"
3535
#load "ColorBar.fs"
3636
#load "Rangebreak.fs"
@@ -121,6 +121,7 @@
121121
#load "Chart3D.fs"
122122
#load "ChartPolar.fs"
123123
#load "ChartMap.fs"
124+
#load "ChartTernary.fs"
124125
#load "ChartDomain.fs"
125126

126127
#I "CSharpLayer"
@@ -147,12 +148,24 @@ open FSharpAux
147148

148149
open System
149150

150-
let products = ["Product A"; "Product B"; "Product C"];
151-
let sfValues = [20; 14; 23]
152-
Chart.Column ( products,
153-
sfValues,
154-
Labels= sfValues,
155-
TextPosition = StyleParam.TextPosition.Inside
151+
Chart.ScatterTernary(
152+
A = [1; 2; 3],
153+
B = [3; 2; 1],
154+
C = [0; 1; 2],
155+
Labels = ["A"; "B"; "C"],
156+
Mode= StyleParam.Mode.Lines_Markers_Text,
157+
TextPosition = StyleParam.TextPosition.BottomCenter
158+
)
159+
|> Chart.withLineStyle(Shape=StyleParam.Shape.Spline)
160+
|> Chart.withMarkerStyle(Symbol = StyleParam.Symbol.Cross)
161+
|> Chart.show
162+
163+
Chart.LineTernary(
164+
A = [10; 20; 30; 40; 50; 60; 70; 80;],
165+
B = ([10; 20; 30; 40; 50; 60; 70; 80;] |> List.rev),
166+
Sum = 100,
167+
ShowMarkers = true,
168+
Dash = StyleParam.DrawingStyle.DashDot
156169
)
157170
|> Chart.show
158171

src/Plotly.NET/Plotly.NET.fsproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@
117117
<Compile Include="ChartAPI\Chart3D.fs" />
118118
<Compile Include="ChartAPI\ChartPolar.fs" />
119119
<Compile Include="ChartAPI\ChartMap.fs" />
120+
<Compile Include="ChartAPI\ChartTernary.fs" />
120121
<Compile Include="ChartAPI\ChartDomain.fs" />
121122
<Compile Include="CSharpLayer\GenericChartExtensions.fs" />
122123
<Compile Include="Extensions\SankeyExtension.fs" />

0 commit comments

Comments
 (0)