Skip to content

[Feature] Public API to get the laid-out rectangle of a grid #21780

Description

@unitrongroup-ir

What problem does this feature solve?

The pixel rectangle of a grid (the plot, where the axes are drawn) is known only after ECharts has laid the chart out, and there is no public way to read it. Apps that draw HTML or SVG over a chart (hover labels, a crosshair line, markers, annotations) need it to put the overlay exactly on the plot.

This has been asked before (#16898, #16480) and answered with the private chart.getModel().getComponent('grid').coordinateSystem.getRect(); #16479 says getModel is private and may change. Everything public falls short:

  • chart.getOption().grid[0] holds the configured values (left, right, outerBoundsMode, ...), not the result of the layout, so it is wrong as soon as containLabel or outerBoundsMode: 'auto' shrink the plot.
  • chart.convertToPixel({ xAxisIndex: 0 }, extreme) needs the axis extent. After a dataZoom, or with scale / automatic ranges, only the model knows it ([Feature] How to get the axis range when datazoom scales it? #17919); getOption().xAxis[0].min/max still holds the configured values after a zoom.
  • chart.containPixel('grid', [x, y]) can find the edges by probing, but that is about log2(size) calls per edge on every layout change.
  • chart.getOption() deep-clones the whole option, data included, on every call, so it cannot be used on every mouse move.

Our case: a pointer drawn in HTML over several synced charts with a few thousand points each (labels at the points nearest to the mouse, a line across the plot and the time under it). It needs the plot's rectangle on every mouse move, so the read has to be cheap, and today it depends on a private method.

What does the proposed API look like?

A getter that mirrors the finders of containPixel and convertToPixel:

chart.getRect({ gridIndex: 0 });
// -> { x: 70, y: 32, width: 460, height: 204 } in chart pixels, or null when the chart has no such grid or is not laid out yet

Or chart.getGridRect(gridIndex?); the name is open. What matters is that it is documented and stable, and that it gives the result of the layout (including outerBoundsMode and containLabel), which is what getRect() of the grid coordinate system holds today.

No activity

Activity on this issue will appear here.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enThis issue is in EnglishpendingWe are not sure about whether this is a bug/new feature.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions