apache / apache/echarts

[Bug] Regression in 6.x: dataZoom slider showDataShadow renders nothing when the shadow-source series has a single data point on a time axis (NaN from zero-width extent)

Open
#21,649 3 comments 1 reaction 0 assignees View on GitHub
bug en pending
Dominant language
TypeScript
Stars
67.3k
Forks
19.8k
Avg merge
11d 14h
Merged PRs (30d)
8

Description

Image

### Version

Affected: 6.0.0 and 6.1.0 (latest). Regression — works in 5.x (tested 5.3.2 and 5.6.0). Introduced in 6.0.0 (the time-axis dataShadow positioning; first present in 6.0.0-beta.1).

### Link to Minimal Reproduction

[Here is the example](https://codepen.io/editor/CounterReset/pen/019ecd8b-19da-7e8c-9287-df1ee1aa1e75)

### Steps to Reproduce

1. xAxis: { type: 'time' }, dataZoom: [{ type: 'slider', showDataShadow: true }].
2. Give the shadow-source series a SINGLE data point.
3. The slider shadow is empty/missing.

Minimal option (the slider shadow vanishes on 6.x; renders on 5.x):

option = {
xAxis: { type: 'time' },
yAxis: { type: 'value' },
dataZoom: [{ type: 'slider', showDataShadow: true }],
series: [{ type: 'line', data: [['2025-07-01', 285]] }]
};

Real-world variant: with multiple series, the *first eligible* series is
chosen as the shadow source, so a single-point first series breaks the
shadow even when later series are dense.

### Current Behavior

In `SliderZoomView._renderDataShadow` (6.x), the time-axis branch computes:

normalizationConstant = size[0] / (thisDataExtent[1] - thisDataExtent[0]);
thisCoord = isTimeAxis ? (value - thisDataExtent[0]) * normalizationConstant : thisCoord + step;

For a single-point series the x-extent has zero width, so
normalizationConstant = Infinity and thisCoord = 0 * Infinity = NaN. The
shadow polygon receives a NaN vertex and does not render.

Measured shadow polygon on 6.1.0: points [[size,0],[0,0],[NaN,15]] (hasNaN=true).
On 5.3.2/5.6.0 the same option yields finite, step-based points (hasNaN=false).

Note the adjacent step path WAS guarded against divide-by-zero
(`Math.max(1, data.count() - 1)`); the new time-axis division was not.

### Expected Behavior

A single-point (zero-width-extent) shadow source should render the same way
it did in 5.x (no NaN), or fall back gracefully — not erase the shadow.

Fix: guard the time-axis normalization when (thisDataExtent[1] -
thisDataExtent[0]) === 0 (e.g. fall back to the step-based coordinate or
clamp to 0), mirroring the existing Math.max guard on `step`.

Happy to PR this.

### Environment

```markdown
- OS: macOS 15
- Browser: Chrome 126
- Framework: Angular
```

### Any additional comments?

This is distinct from the `timeline` component — the issue is specifically
in the `dataZoom-slider` shadow source-series selection.

The slider's data shadow is empty on 6.x. Switch the CDN to echarts/5.6.0 and the shadow appears — same option.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.