Skip to content

Support arbitrary X axis in the plot view using a ScalarAbscissa #8286

Open
@abey79

Description

@abey79

This discord thread got me thinking and I'd like to suggest this alternative take on:

In this discussion, the user wanted to store an entire 2D plot in each frame of their simulation result, and resorted to logging a matplotlib raster:

Image

Note: this proposal address the (possibly time-varying) "instantaneous" plot use case, aka the use case where the entire plot (X and Y axis) is stored at a single time point (modulo latest at). It does not address the case where one time varying scalar must be plotted against another time varying scalar.

Core proposal

The core proposal is to introduce a ScalarAbscissa component (someone please finds a better name) that is essentially a Scalar component to be used as X axis (with tagged components we could actually reuse the same Scalar component).

Then, the existing Timeseries view would be altered as follows:

  • Renamed to Plot view.
  • When used in Latest At mode: plot the Scalar component (which, in this case, should typically be a n>1 batch) against the ScalarAbscissa component.
  • When used in Range mode: no modifications w.r.t to the current behaviour. (For a given time point, if the Scalar is a batch, pick instance at index 0 and ignore others. Also, ignore ScalarAbscissa.)

Scalar x ScalarAbscissa join

  • Obviously, we have basic instance join semantics.
  • The resulting plot has a number of point which is the min of both components (if Scalaras 10 instance and ScalarAbscissa as 15, then we plot 10 points).
  • The fallback provider for ScalarAbscissa is range(n) where n = len(Scalar).
  • If multiple entities are added to the plot view, each Scalar are matched against the collocated ScalarAbscissa (if any). In other words, not cross-entity shenanigans (*)

(*) this is a bit of a limitation in the case of many series against the same abscissa. Possible workaround:

  • allow 2d tensors to be considered a collection of multiple scalars
  • allow multiple scalars to be collocated using tagged components
  • allow any vecXD-based component to be plottable

Bonus features

  • When in Range mode with n>1 Scalar batches, have some options to display a compound value for each point (mean/media with stddev bars, box plot, etc.)

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or requestuiconcerns graphical user interface📈 plotPlots, charts, graphs, timeseries, …🔩 data modelSorbet

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions