plotly / Plotly.NET

interactive graphing library for .NET programming languages :chart_with_upwards_trend:
https://plotly.net
MIT License
663 stars 88 forks source link

Add options for retrieving/replacing **all** subplots on a layout #415

Closed kMutagene closed 5 months ago

kMutagene commented 1 year ago

Description

Since the member names of subplots on a layout are dynamic, e.g. a layout can have multiple scenes, scene, scene2, scene<n>, bugs can be caused by high-level APIs that retrieve and change subplot objects, for example Chart.Grid @ #413.

Repro steps

see #413

Suggested Solution

functions on Layout and their top-level equivalents on the Chart API must provide options to retrieve and replace all instances of a subplot. The concrete solution for #413 would look like this:

chart
|> ``get all scenes on the chart``
|> ``when there is more than one scene present, choose a sensible default, e.g. the first one``
|> ``style the retrieved single scene accordingly``
|> ``set the scene on the layout, removing all scenes that are there
kMutagene commented 6 months ago

Further relevant info: these types of bugs (#413) do not happen on low-level API usage.

This example

[
    Trace3D.initScatter3D(Trace3DStyle.Scatter3D(X = [1], Y = [2], Z = [3])) |> GenericChart.ofTraceObject false
    Trace3D.initScatter3D(Trace3DStyle.Scatter3D(X = [1], Y = [2], Z = [3])) |> GenericChart.ofTraceObject false
    Trace3D.initScatter3D(Trace3DStyle.Scatter3D(X = [1], Y = [2], Z = [3])) |> GenericChart.ofTraceObject false
    Trace3D.initScatter3D(Trace3DStyle.Scatter3D(X = [1], Y = [2], Z = [3])) |> GenericChart.ofTraceObject false
]
|> Chart.Grid(2,2)

image

works fine, while using Chart.Point3D does not:

[
    Chart.Point3D([1,2,3], UseDefaults = false)
    Chart.Point3D([1,2,3], UseDefaults = false)
    Chart.Point3D([1,2,3], UseDefaults = false)
    Chart.Point3D([1,2,3], UseDefaults = false)
    Chart.Point3D([1,2,3], UseDefaults = false)
]
|> Chart.Grid(2,2)

image