mirror of
https://github.com/home-assistant/frontend.git
synced 2026-10-06 15:54:17 +01:00
The chart data modules push a null y value to break the line where an entity was unavailable. downSampleLineData read it with Number(), and Number(null) is 0, which is not NaN, so the isNaN guard did not fire. The marker then competed as a real value of 0 and won its frame's minimum slot whenever the readings were positive, discarding the frame's actual minimum and widening the rendered gap. Keep markers out of the min/max comparisons entirely and hold at most one per frame in its own slot. It is emitted, after the frame's values, only when no kept value follows it: a marker followed by a value in its own frame is a gap that closed within one frame, which is about one device pixel wide and too narrow to show. That check runs per frame at emit time, so the per-point path stays as it was. Keeping every marker instead would blow up the output on series that are mostly null, such as the climate heating dataset, which went from 823 to 14525 points before this was bounded. Skipping markers before the numeric work also makes gapped series faster: 16% on a series with a few gaps, 27% on one that is mostly gaps. Both now have benchmark coverage, which the gap path lacked. Mean mode no longer averages markers in as zero.