You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@echarts.apache.org by "Nas01010101 (via GitHub)" <gi...@apache.org> on 2026/08/03 01:36:13 UTC
[PR] fix(sunburst): redistribute angles constrained by minAngle. close #20602 [echarts]
Nas01010101 opened a new pull request, #21711:
URL: https://github.com/apache/echarts/pull/21711
## Brief Information
This pull request is in the type of:
- [x] bug fixing
- [ ] new feature
- [ ] others
### What does this PR do?
Makes `sunburst.minAngle` shrink the sibling sectors that are large enough, so that a group of children still fits exactly inside its parent.
### Fixed issues
- #20602
## Details
### Before: What was the problem?
`sunburstLayout` enlarged any sector smaller than `minAngle` up to `minAngle`, but never took the extra angle back from the other sectors. The code that was supposed to do so was left commented out:
```js
if (angle < minAngle) {
angle = minAngle;
// restAngle -= minAngle;
}
// else {
// valueSumLargerThanMinAngle += value;
// }
```
So the children of a node could add up to more than the node itself. In the demo of #20602, hovering `c` shows it overlapping `d`. With four children of `100 / 1 / 1 / 1` and `minAngle: 30`, a parent spanning 360 degrees gets children spanning 439.5 degrees.
### After: How does it behave after the fixing?
`getChildrenAngles()` now lays out a whole sibling group at once, in the same two passes `pieLayout` already uses:
1. compute each child's angle, raise the ones below `minAngle`, subtract what they took from the angle left over, and total the values of the ones left untouched;
2. share the remaining angle among those untouched children in proportion to their values, or, if `minAngle` cannot be satisfied at all, split the parent evenly.
Because a sunburst is nested, this runs per sibling group with the parent's own angle as the budget, rather than once over a flat list as in a pie. Uncommenting the two lines above would not have been enough: they were reaching for a single series-wide `restAngle`, which would let a shortfall in one subtree be paid for by an unrelated subtree elsewhere in the ring.
Using the parent's assigned angle as the budget also fixes the second-order case: when a node is itself enlarged to `minAngle`, its children are redistributed into the enlarged span instead of leaving a gap in the outer ring. With the group's natural sum as the budget instead, a node with a natural span of 21.3 degrees enlarged to 30 degrees still had children totalling only 21.3.
`minAngle` defaults to `0`, and with `minAngle: 0` nothing is ever clamped, so the redistribution pass is skipped entirely and existing charts lay out bit-for-bit as before.
### Document Info
- [ ] I've updated the document
- [x] Doesn't need document change
`sunburst.minAngle` is currently not documented (only `sunburst.label.minAngle` is), so nothing needs updating, though it may be worth documenting separately now that it behaves like `pie.minAngle`.
## Others
### Merging options
- [x] Please squash the commits into one
- [ ] I'd like to squash the commits myself
### Other information
Added `test/ut/spec/series/sunburst.test.ts` with five cases: the overflow itself, the nested/enlarged-parent case, the zero-sum case (20 zero-value nodes with `minAngle: 30` spanned 600 degrees before), that small sectors are still enlarged, and that `minAngle: 0` is unchanged.
Verified on Linux x86_64, node 22:
```
# with this change reverted
Tests: 3 failed, 2 passed, 5 total
# with this change
Tests: 5 passed, 5 total
# full unit suite, with this change
TZ=Asia/Shanghai npx jest --config test/ut/jest.config.cjs
Test Suites: 27 passed, 27 total
Tests: 199 passed, 199 total
```
Without `TZ` set, `spec/util/time.test.ts` fails on a locale-dependent assertion unrelated to this change.
Possible conflict: open PRs #21687 and #21598 each also create `test/ut/spec/series/sunburst.test.ts`, so whichever lands second will need a trivial merge.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org
Re: [PR] fix(sunburst): redistribute angles constrained by minAngle. close #20602 [echarts]
Posted by "echarts-bot[bot] (via GitHub)" <gi...@apache.org>.
echarts-bot[bot] commented on PR #21711:
URL: https://github.com/apache/echarts/pull/21711#issuecomment-5161423347
Thanks for your contribution!
The community will review it ASAP. In the meanwhile, please checkout [the coding standard](https://echarts.apache.org/en/coding-standard.html) and Wiki about [How to make a pull request](https://github.com/apache/echarts/wiki/How-to-make-a-pull-request).
Please **DO NOT** commit the files in [dist](https://github.com/apache/echarts/tree/master/dist), [i18n](https://github.com/apache/echarts/tree/master/i18n), and [ssr/client/dist](https://github.com/apache/echarts/tree/master/ssr/client/dist) folders in a non-release pull request. These folders are for release use only.
To reviewers: If this PR is going to be described in the changelog in the future release, please make sure this PR has one of the following labels: `PR: doc ready`, `PR: awaiting doc`, `PR: doc unchanged`
This message is shown because the PR description doesn't contain the document related template.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@echarts.apache.org
For additional commands, e-mail: commits-help@echarts.apache.org