Skip to content

Commit 8f03019

Browse files
committed
Add WebGL option to all existing polar charts
1 parent c9fa11f commit 8f03019

File tree

2 files changed

+137
-102
lines changed

2 files changed

+137
-102
lines changed

src/Plotly.NET/Chart.fs

Lines changed: 130 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,14 @@ type Chart =
4141
Trace.initScatter style
4242
|> GenericChart.ofTraceObject
4343

44+
static member private renderScatterPolarTrace (useWebGL:bool) (style: Trace -> Trace) =
45+
if useWebGL then
46+
Trace.initScatterPolarGL style
47+
|> GenericChart.ofTraceObject
48+
else
49+
Trace.initScatterPolar style
50+
|> GenericChart.ofTraceObject
51+
4452
/// <summary>Creates a chart that is completely invisible when rendered. The Chart object however is NOT empty! Combining this chart with other charts will have unforseen consequences (it has for example invisible axes that can override other axes if used in Chart.Combine)</summary>
4553
static member Invisible () =
4654
let hiddenAxis() =
@@ -1233,7 +1241,9 @@ type Chart =
12331241

12341242

12351243
/// Uses points, line or both depending on the mode to represent data points in a polar chart
1236-
static member ScatterPolar(r, theta, mode,
1244+
static member ScatterPolar
1245+
(
1246+
r, theta, mode,
12371247
[<Optional;DefaultParameterValue(null)>] ?Name,
12381248
[<Optional;DefaultParameterValue(null)>] ?Showlegend,
12391249
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol,
@@ -1243,22 +1253,24 @@ type Chart =
12431253
[<Optional;DefaultParameterValue(null)>] ?TextPosition,
12441254
[<Optional;DefaultParameterValue(null)>] ?TextFont,
12451255
[<Optional;DefaultParameterValue(null)>] ?Dash,
1246-
[<Optional;DefaultParameterValue(null)>] ?Width) =
1247-
1248-
Trace.initScatterPolar (
1249-
TraceStyle.ScatterPolar(
1250-
R = r,
1251-
Theta = theta,
1252-
Mode = mode
1253-
)
1254-
)
1255-
|> TraceStyle.TraceInfo(?Name=Name,?Showlegend=Showlegend,?Opacity=Opacity)
1256-
|> TraceStyle.Line(?Color=Color,?Dash=Dash,?Width=Width)
1257-
|> TraceStyle.Marker(?Color=Color,?Symbol=MarkerSymbol)
1258-
|> TraceStyle.TextLabel(?Text=Labels,?Textposition=TextPosition,?Textfont=TextFont)
1259-
|> GenericChart.ofTraceObject
1256+
[<Optional;DefaultParameterValue(null)>] ?Width,
1257+
[<Optional;DefaultParameterValue(null)>] ?UseWebGL
1258+
) =
12601259

1260+
let style =
1261+
TraceStyle.ScatterPolar(
1262+
R = r,
1263+
Theta = theta,
1264+
Mode = mode
1265+
)
1266+
>> TraceStyle.TraceInfo(?Name=Name,?Showlegend=Showlegend,?Opacity=Opacity)
1267+
>> TraceStyle.Line(?Color=Color,?Dash=Dash,?Width=Width)
1268+
>> TraceStyle.Marker(?Color=Color,?Symbol=MarkerSymbol)
1269+
>> TraceStyle.TextLabel(?Text=Labels,?Textposition=TextPosition,?Textfont=TextFont)
1270+
1271+
let useWebGL = defaultArg UseWebGL false
12611272

1273+
Chart.renderScatterPolarTrace useWebGL style
12621274

12631275
/// Uses points, line or both depending on the mode to represent data points in a polar chart
12641276
static member ScatterPolar
@@ -1273,7 +1285,8 @@ type Chart =
12731285
[<Optional;DefaultParameterValue(null)>] ?TextPosition,
12741286
[<Optional;DefaultParameterValue(null)>] ?TextFont,
12751287
[<Optional;DefaultParameterValue(null)>] ?Dash,
1276-
[<Optional;DefaultParameterValue(null)>] ?Width
1288+
[<Optional;DefaultParameterValue(null)>] ?Width,
1289+
[<Optional;DefaultParameterValue(null)>] ?UseWebGL
12771290
) =
12781291

12791292
let r,t = Seq.unzip rtheta
@@ -1289,49 +1302,54 @@ type Chart =
12891302
?TextPosition=TextPosition,
12901303
?TextFont=TextFont,
12911304
?Dash=Dash,
1292-
?Width=Width
1305+
?Width=Width,
1306+
?UseWebGL = UseWebGL
12931307
)
12941308

12951309
///
12961310
static member PointPolar
12971311
(
12981312
r, theta,
1299-
[<Optional;DefaultParameterValue(null)>] ?Name,
1300-
[<Optional;DefaultParameterValue(null)>] ?Showlegend,
1301-
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol,
1302-
[<Optional;DefaultParameterValue(null)>] ?Color,
1303-
[<Optional;DefaultParameterValue(null)>] ?Opacity,
1304-
[<Optional;DefaultParameterValue(null)>] ?Labels,
1305-
[<Optional;DefaultParameterValue(null)>] ?TextPosition,
1306-
[<Optional;DefaultParameterValue(null)>] ?TextFont
1313+
[<Optional;DefaultParameterValue(null)>] ?Name,
1314+
[<Optional;DefaultParameterValue(null)>] ?Showlegend,
1315+
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol,
1316+
[<Optional;DefaultParameterValue(null)>] ?Color,
1317+
[<Optional;DefaultParameterValue(null)>] ?Opacity,
1318+
[<Optional;DefaultParameterValue(null)>] ?Labels,
1319+
[<Optional;DefaultParameterValue(null)>] ?TextPosition,
1320+
[<Optional;DefaultParameterValue(null)>] ?TextFont,
1321+
[<Optional;DefaultParameterValue(null)>] ?UseWebGL
13071322
) =
13081323

13091324
let changeMode = StyleParam.ModeUtils.showText (TextPosition.IsSome || TextFont.IsSome)
13101325

1311-
Trace.initScatterPolar (
1326+
let style =
13121327
TraceStyle.ScatterPolar(
13131328
R = r,
13141329
Theta = theta,
13151330
Mode = changeMode StyleParam.Mode.Markers
13161331
)
1317-
)
1318-
|> TraceStyle.TraceInfo(?Name=Name,?Showlegend=Showlegend,?Opacity=Opacity)
1319-
|> TraceStyle.Marker(?Color=Color,?Symbol=MarkerSymbol)
1320-
|> TraceStyle.TextLabel(?Text=Labels,?Textposition=TextPosition,?Textfont=TextFont)
1321-
|> GenericChart.ofTraceObject
1332+
>> TraceStyle.TraceInfo(?Name=Name,?Showlegend=Showlegend,?Opacity=Opacity)
1333+
>> TraceStyle.Marker(?Color=Color,?Symbol=MarkerSymbol)
1334+
>> TraceStyle.TextLabel(?Text=Labels,?Textposition=TextPosition,?Textfont=TextFont)
1335+
1336+
let useWebGL = defaultArg UseWebGL false
1337+
1338+
Chart.renderScatterPolarTrace useWebGL style
13221339

13231340
///
13241341
static member PointPolar
13251342
(
13261343
rtheta,
1327-
[<Optional;DefaultParameterValue(null)>] ?Name,
1328-
[<Optional;DefaultParameterValue(null)>] ?Showlegend,
1329-
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol,
1330-
[<Optional;DefaultParameterValue(null)>] ?Color,
1331-
[<Optional;DefaultParameterValue(null)>] ?Opacity,
1332-
[<Optional;DefaultParameterValue(null)>] ?Labels,
1333-
[<Optional;DefaultParameterValue(null)>] ?TextPosition,
1334-
[<Optional;DefaultParameterValue(null)>] ?TextFont
1344+
[<Optional;DefaultParameterValue(null)>] ?Name,
1345+
[<Optional;DefaultParameterValue(null)>] ?Showlegend,
1346+
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol,
1347+
[<Optional;DefaultParameterValue(null)>] ?Color,
1348+
[<Optional;DefaultParameterValue(null)>] ?Opacity,
1349+
[<Optional;DefaultParameterValue(null)>] ?Labels,
1350+
[<Optional;DefaultParameterValue(null)>] ?TextPosition,
1351+
[<Optional;DefaultParameterValue(null)>] ?TextFont,
1352+
[<Optional;DefaultParameterValue(null)>] ?UseWebGL
13351353
) =
13361354
let r,t = Seq.unzip rtheta
13371355

@@ -1344,24 +1362,26 @@ type Chart =
13441362
?Opacity = Opacity,
13451363
?Labels = Labels,
13461364
?TextPosition = TextPosition,
1347-
?TextFont = TextFont
1365+
?TextFont = TextFont,
1366+
?UseWebGL = UseWebGL
13481367
)
13491368

13501369
///
13511370
static member LinePolar
13521371
(
13531372
r, theta,
1354-
[<Optional;DefaultParameterValue(null)>] ?Name,
1355-
[<Optional;DefaultParameterValue(null)>] ?Showlegend,
1356-
[<Optional;DefaultParameterValue(null)>] ?ShowMarkers,
1357-
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol,
1358-
[<Optional;DefaultParameterValue(null)>] ?Color,
1359-
[<Optional;DefaultParameterValue(null)>] ?Opacity,
1360-
[<Optional;DefaultParameterValue(null)>] ?Labels,
1361-
[<Optional;DefaultParameterValue(null)>] ?TextPosition,
1362-
[<Optional;DefaultParameterValue(null)>] ?TextFont,
1363-
[<Optional;DefaultParameterValue(null)>] ?Dash,
1364-
[<Optional;DefaultParameterValue(null)>] ?Width
1373+
[<Optional;DefaultParameterValue(null)>] ?Name,
1374+
[<Optional;DefaultParameterValue(null)>] ?Showlegend,
1375+
[<Optional;DefaultParameterValue(null)>] ?ShowMarkers,
1376+
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol,
1377+
[<Optional;DefaultParameterValue(null)>] ?Color,
1378+
[<Optional;DefaultParameterValue(null)>] ?Opacity,
1379+
[<Optional;DefaultParameterValue(null)>] ?Labels,
1380+
[<Optional;DefaultParameterValue(null)>] ?TextPosition,
1381+
[<Optional;DefaultParameterValue(null)>] ?TextFont,
1382+
[<Optional;DefaultParameterValue(null)>] ?Dash,
1383+
[<Optional;DefaultParameterValue(null)>] ?Width,
1384+
[<Optional;DefaultParameterValue(null)>] ?UseWebGL
13651385
) =
13661386
let changeMode =
13671387
let isShowMarker =
@@ -1371,34 +1391,37 @@ type Chart =
13711391
StyleParam.ModeUtils.showText (TextPosition.IsSome || TextFont.IsSome)
13721392
>> StyleParam.ModeUtils.showMarker (isShowMarker)
13731393

1374-
Trace.initScatterPolar (
1394+
let style =
13751395
TraceStyle.ScatterPolar(
13761396
R = r,
13771397
Theta = theta,
13781398
Mode = changeMode StyleParam.Mode.Lines
13791399
)
1380-
)
1381-
|> TraceStyle.TraceInfo(?Name=Name,?Showlegend=Showlegend,?Opacity=Opacity)
1382-
|> TraceStyle.Line(?Color=Color,?Dash=Dash,?Width=Width)
1383-
|> TraceStyle.Marker(?Color=Color,?Symbol=MarkerSymbol)
1384-
|> TraceStyle.TextLabel(?Text=Labels,?Textposition=TextPosition,?Textfont=TextFont)
1385-
|> GenericChart.ofTraceObject
1400+
>> TraceStyle.TraceInfo(?Name=Name,?Showlegend=Showlegend,?Opacity=Opacity)
1401+
>> TraceStyle.Line(?Color=Color,?Dash=Dash,?Width=Width)
1402+
>> TraceStyle.Marker(?Color=Color,?Symbol=MarkerSymbol)
1403+
>> TraceStyle.TextLabel(?Text=Labels,?Textposition=TextPosition,?Textfont=TextFont)
1404+
1405+
let useWebGL = defaultArg UseWebGL false
1406+
1407+
Chart.renderScatterPolarTrace useWebGL style
13861408

13871409
///
13881410
static member LinePolar
13891411
(
13901412
rtheta,
1391-
[<Optional;DefaultParameterValue(null)>] ?Name,
1392-
[<Optional;DefaultParameterValue(null)>] ?Showlegend,
1393-
[<Optional;DefaultParameterValue(null)>] ?ShowMarkers,
1394-
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol,
1395-
[<Optional;DefaultParameterValue(null)>] ?Color,
1396-
[<Optional;DefaultParameterValue(null)>] ?Opacity,
1397-
[<Optional;DefaultParameterValue(null)>] ?Labels,
1398-
[<Optional;DefaultParameterValue(null)>] ?TextPosition,
1399-
[<Optional;DefaultParameterValue(null)>] ?TextFont,
1400-
[<Optional;DefaultParameterValue(null)>] ?Dash,
1401-
[<Optional;DefaultParameterValue(null)>] ?Width
1413+
[<Optional;DefaultParameterValue(null)>] ?Name,
1414+
[<Optional;DefaultParameterValue(null)>] ?Showlegend,
1415+
[<Optional;DefaultParameterValue(null)>] ?ShowMarkers,
1416+
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol,
1417+
[<Optional;DefaultParameterValue(null)>] ?Color,
1418+
[<Optional;DefaultParameterValue(null)>] ?Opacity,
1419+
[<Optional;DefaultParameterValue(null)>] ?Labels,
1420+
[<Optional;DefaultParameterValue(null)>] ?TextPosition,
1421+
[<Optional;DefaultParameterValue(null)>] ?TextFont,
1422+
[<Optional;DefaultParameterValue(null)>] ?Dash,
1423+
[<Optional;DefaultParameterValue(null)>] ?Width,
1424+
[<Optional;DefaultParameterValue(null)>] ?UseWebGL
14021425
) =
14031426
let r,t = Seq.unzip rtheta
14041427

@@ -1414,25 +1437,27 @@ type Chart =
14141437
?TextPosition = TextPosition,
14151438
?TextFont = TextFont,
14161439
?Dash = Dash,
1417-
?Width = Width
1440+
?Width = Width,
1441+
?UseWebGL = UseWebGL
14181442
)
14191443

14201444
///
14211445
static member SplinePolar
14221446
(
14231447
r, theta,
1424-
[<Optional;DefaultParameterValue(null)>] ?Name,
1425-
[<Optional;DefaultParameterValue(null)>] ?Showlegend,
1426-
[<Optional;DefaultParameterValue(null)>] ?ShowMarkers,
1427-
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol,
1428-
[<Optional;DefaultParameterValue(null)>] ?Color,
1429-
[<Optional;DefaultParameterValue(null)>] ?Opacity,
1430-
[<Optional;DefaultParameterValue(null)>] ?Labels,
1431-
[<Optional;DefaultParameterValue(null)>] ?TextPosition,
1432-
[<Optional;DefaultParameterValue(null)>] ?TextFont,
1433-
[<Optional;DefaultParameterValue(null)>] ?Smoothing,
1434-
[<Optional;DefaultParameterValue(null)>] ?Dash,
1435-
[<Optional;DefaultParameterValue(null)>] ?Width
1448+
[<Optional;DefaultParameterValue(null)>] ?Name,
1449+
[<Optional;DefaultParameterValue(null)>] ?Showlegend,
1450+
[<Optional;DefaultParameterValue(null)>] ?ShowMarkers,
1451+
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol,
1452+
[<Optional;DefaultParameterValue(null)>] ?Color,
1453+
[<Optional;DefaultParameterValue(null)>] ?Opacity,
1454+
[<Optional;DefaultParameterValue(null)>] ?Labels,
1455+
[<Optional;DefaultParameterValue(null)>] ?TextPosition,
1456+
[<Optional;DefaultParameterValue(null)>] ?TextFont,
1457+
[<Optional;DefaultParameterValue(null)>] ?Smoothing,
1458+
[<Optional;DefaultParameterValue(null)>] ?Dash,
1459+
[<Optional;DefaultParameterValue(null)>] ?Width,
1460+
[<Optional;DefaultParameterValue(null)>] ?UseWebGL
14361461
) =
14371462
let changeMode =
14381463
let isShowMarker =
@@ -1442,35 +1467,37 @@ type Chart =
14421467
StyleParam.ModeUtils.showText (TextPosition.IsSome || TextFont.IsSome)
14431468
>> StyleParam.ModeUtils.showMarker (isShowMarker)
14441469

1445-
Trace.initScatterPolar (
1470+
let style =
14461471
TraceStyle.ScatterPolar(
14471472
R = r,
14481473
Theta = theta,
14491474
Mode = changeMode StyleParam.Mode.Lines
14501475
)
1451-
)
1452-
|> TraceStyle.TraceInfo(?Name=Name,?Showlegend=Showlegend,?Opacity=Opacity)
1453-
|> TraceStyle.Line(?Color=Color,?Dash=Dash,?Width=Width, Shape=StyleParam.Shape.Spline, ?Smoothing=Smoothing)
1454-
|> TraceStyle.Marker(?Color=Color,?Symbol=MarkerSymbol)
1455-
|> TraceStyle.TextLabel(?Text=Labels,?Textposition=TextPosition,?Textfont=TextFont)
1456-
|> GenericChart.ofTraceObject
1476+
>> TraceStyle.TraceInfo(?Name=Name,?Showlegend=Showlegend,?Opacity=Opacity)
1477+
>> TraceStyle.Line(?Color=Color,?Dash=Dash,?Width=Width, Shape=StyleParam.Shape.Spline, ?Smoothing=Smoothing)
1478+
>> TraceStyle.Marker(?Color=Color,?Symbol=MarkerSymbol)
1479+
>> TraceStyle.TextLabel(?Text=Labels,?Textposition=TextPosition,?Textfont=TextFont)
14571480

1481+
let useWebGL = defaultArg UseWebGL false
1482+
1483+
Chart.renderScatterPolarTrace useWebGL style
14581484
///
14591485
static member SplinePolar
14601486
(
14611487
rtheta,
1462-
[<Optional;DefaultParameterValue(null)>] ?Name,
1463-
[<Optional;DefaultParameterValue(null)>] ?Showlegend,
1464-
[<Optional;DefaultParameterValue(null)>] ?ShowMarkers,
1465-
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol,
1466-
[<Optional;DefaultParameterValue(null)>] ?Color,
1467-
[<Optional;DefaultParameterValue(null)>] ?Opacity,
1468-
[<Optional;DefaultParameterValue(null)>] ?Labels,
1469-
[<Optional;DefaultParameterValue(null)>] ?TextPosition,
1470-
[<Optional;DefaultParameterValue(null)>] ?TextFont,
1471-
[<Optional;DefaultParameterValue(null)>] ?Smoothing,
1472-
[<Optional;DefaultParameterValue(null)>] ?Dash,
1473-
[<Optional;DefaultParameterValue(null)>] ?Width
1488+
[<Optional;DefaultParameterValue(null)>] ?Name,
1489+
[<Optional;DefaultParameterValue(null)>] ?Showlegend,
1490+
[<Optional;DefaultParameterValue(null)>] ?ShowMarkers,
1491+
[<Optional;DefaultParameterValue(null)>] ?MarkerSymbol,
1492+
[<Optional;DefaultParameterValue(null)>] ?Color,
1493+
[<Optional;DefaultParameterValue(null)>] ?Opacity,
1494+
[<Optional;DefaultParameterValue(null)>] ?Labels,
1495+
[<Optional;DefaultParameterValue(null)>] ?TextPosition,
1496+
[<Optional;DefaultParameterValue(null)>] ?TextFont,
1497+
[<Optional;DefaultParameterValue(null)>] ?Smoothing,
1498+
[<Optional;DefaultParameterValue(null)>] ?Dash,
1499+
[<Optional;DefaultParameterValue(null)>] ?Width,
1500+
[<Optional;DefaultParameterValue(null)>] ?UseWebGL
14741501
) =
14751502
let r,t = Seq.unzip rtheta
14761503

@@ -1487,7 +1514,8 @@ type Chart =
14871514
?TextFont = TextFont,
14881515
?Smoothing = Smoothing,
14891516
?Dash = Dash,
1490-
?Width = Width
1517+
?Width = Width,
1518+
?UseWebGL = UseWebGL
14911519
)
14921520

14931521

src/Plotly.NET/Playground.fsx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,13 @@ of three or more quantitative variables represented on axes starting from the sa
8484
The relative position and angle of the axes is typically uninformative.
8585
*)
8686

87+
// webGL Comparison
88+
89+
let largeRT = [for i in 0. .. 0.01 .. 360. do yield i,i ]
90+
91+
let noGL = Chart.PointPolar(largeRT) |> Chart.Show
92+
let yesGL = Chart.PointPolar(largeRT,UseWebGL=true) |> Chart.Show // it is so much faster, damn
93+
8794
let polar1 =
8895
[
8996
Chart.PointPolar(r,t,Name="PointPolar")

0 commit comments

Comments
 (0)