Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CartesianAxis: Improve interval option 'equidistantPreserveStart' #3768

Merged
merged 19 commits into from Sep 22, 2023

Conversation

nikolasrieble
Copy link
Contributor

@nikolasrieble nikolasrieble commented Sep 20, 2023

Description

This PR overhauls the existing interval option equidistantPreserveStart

In this variant, we always show the first tick, and starting from the first, we find the smallest N, for which all n-th ticks can be shown without collision.

A collision is defined as two overlapping ticks, taking into account custom tick formatting, a unit, the fontsize, the angle, et cetera (in alignment with the other existing methods). An overlap is identified if the end of the previous tick overlaps with the start of the next one.

Downside of this method:

  • When the first tick is very long, hardly any other ticks will be shown.
  • Performance: Instead of iterating over the ticks once, as all other methods do, this method iterates at most M times, M being the total amount of available ticks (i.e. for 1000 datapoints, 1000 times). All other methods are thus more performant. This is a good candidate to discuss in review or to iterate upon.

Related Issue

#3305

How Has This Been Tested?

Screenshots (if appropriate):

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)

Checklist:

  • My code follows the code style of this project.
  • My change requires a change to the documentation.
  • I have updated the documentation accordingly.
  • I have added tests to cover my changes.
  • I have added a storybook story or extended an existing story to show my changes
  • All new and existing tests passed.

@nikolasrieble nikolasrieble changed the title Nikolas.ticks.equidistant CartesianAxis: Extend interval API by 'equidistant' Sep 20, 2023
@nikolasrieble
Copy link
Contributor Author

Extracting #3769 from this PR to have a prefactoring PR without any behavioural change.

@nikolasrieble nikolasrieble marked this pull request as ready for review September 21, 2023 12:38
@nikolasrieble
Copy link
Contributor Author

Screenshot 2023-09-21 at 15 39 22

@nikolasrieble
Copy link
Contributor Author

@ckifer What do you think about:

  • Should we deprecate equidistantPreserveStart?

@ckifer
Copy link
Member

ckifer commented Sep 21, 2023

I don't see an issue with deprecating it really except the fact that it was very recently introduced. I certainly wouldn't prefer it over the others.

We'd need to add a deprecation warning and then remove it on 3.0

Comment on lines +21 to +26
{ ticksThatFit: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], resultingTicks: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] },
{ ticksThatFit: [0, 1, 2, 3, 4, 5, 6, 7, 8], resultingTicks: [0, 2, 4, 6, 8] },
{ ticksThatFit: [0, 1, 2, 3, 4, 5, 6, 7], resultingTicks: [0, 5] },
{ ticksThatFit: [0, 1, 2, 3, 4, 5, 6], resultingTicks: [0, 5] },
{ ticksThatFit: [0, 1, 2, 3, 4, 5], resultingTicks: [0, 5] },
{ ticksThatFit: [0, 1, 2, 3, 4], resultingTicks: [0] },
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This section deserves scrutiny. Is this the behaviour we want to achieve?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this really true in the browser though?

I feel like all of these should be able to fit? every time?

I kind of think we shouldn't always preserve start and instead show as many as we can while maintaining equidistance

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I construct the ticks in the test such that this is true in the browser.
But good point, if we were to dynamically allow starting from any tick but still only show equidistant ticks, we could show much more.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Really, we could consider to redo the interface completely. As far as I understand it, the options currently are:

alwaysShowStart alwaysShowEnd collisionHandlingStrategy currentName
true false keep left preserveStart
false true keep right preserveEnd
true true keep left preserveStartEnd
true false compute collision to direct neighbour and then select every nTH equidistantPreserveStart
true false show every nTH without collision equidistant

We could have the option to choose equidistant without alwaysShowStart.

I admittedly find the naming of these strategies not that insightful. We should probably investigate how others do this.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The more I think about this, I believe we should simply replace the existing equidistantPreserveStart with this implementation.

This would be a breaking change, as it changes existing behaviour, but the change would only be to the better, namely we would show more ticks than we previously did, and there would yet be no collision.

@ckifer What do you think about this approach?

I like it, because it does not further complicate the API and it improves the existing behaviour (almost a bug fix)

Copy link
Member

@ckifer ckifer Sep 22, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm on board - if people complain that their chart looks better then... not sure lol. If anything we could do the same thing with preserveEnd if we wanted no?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done. Thanks for the discussion.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm on board - of people complain that their chart looks better then... not sure lol. If anything we could do the same thing with preserveEnd if we wanted no?

They will look better, Coltin! :P

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Exactly 🚀. If there are complaints I will say but... they look better 😂

Copy link
Member

@ckifer ckifer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good overall, I love how much the prefactoring helped here

test/cartesian/getEquidistantTicks.spec.ts Outdated Show resolved Hide resolved
Comment on lines +21 to +26
{ ticksThatFit: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], resultingTicks: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] },
{ ticksThatFit: [0, 1, 2, 3, 4, 5, 6, 7, 8], resultingTicks: [0, 2, 4, 6, 8] },
{ ticksThatFit: [0, 1, 2, 3, 4, 5, 6, 7], resultingTicks: [0, 5] },
{ ticksThatFit: [0, 1, 2, 3, 4, 5, 6], resultingTicks: [0, 5] },
{ ticksThatFit: [0, 1, 2, 3, 4, 5], resultingTicks: [0, 5] },
{ ticksThatFit: [0, 1, 2, 3, 4], resultingTicks: [0] },
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is this really true in the browser though?

I feel like all of these should be able to fit? every time?

I kind of think we shouldn't always preserve start and instead show as many as we can while maintaining equidistance

@nikolasrieble nikolasrieble changed the title CartesianAxis: Extend interval API by 'equidistant' CartesianAxis: Improve interval option 'equidistantPreserveStart' Sep 22, 2023
@nikolasrieble nikolasrieble merged commit 1a70268 into master Sep 22, 2023
10 of 11 checks passed
@christopherkindl
Copy link

Thanks so much for this improvement from the entire Tremor team!

renovate bot added a commit to SAP/ui5-webcomponents-react that referenced this pull request Oct 18, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [recharts](https://togithub.com/recharts/recharts) | [`2.8.0` ->
`2.9.0`](https://renovatebot.com/diffs/npm/recharts/2.8.0/2.9.0) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/recharts/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/recharts/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/recharts/2.8.0/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/recharts/2.8.0/2.9.0?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>recharts/recharts (recharts)</summary>

###
[`v2.9.0`](https://togithub.com/recharts/recharts/releases/tag/v2.9.0)

[Compare
Source](https://togithub.com/recharts/recharts/compare/v2.8.0...v2.9.0)

#### What's Changed

Quite a lot this minor release! We sent out a cry for help and many
answered - thank you so much for that 🙌🏼

This release aims at internal maintainability, long lingering bugs, and
needed improvements. Highlights include equidistant tick improvements,
an active bar feature, and an ~85k/~9kb (gzipped) bundle size reduction
🚀

##### Feat

- `Bar`: Implement activeBar for Bar component by
[@&#8203;andrewangelle](https://togithub.com/andrewangelle) in
[recharts/recharts#3756
- `CartesianGrid`: add `syncWithticks`, `horizonalValues`, and
`verticalValues` props to allow more grid line customization by
[@&#8203;morozovkirill](https://togithub.com/morozovkirill) in
[recharts/recharts#3746
solves
[recharts/recharts#2153
- `CartesianAxis`: Improve interval option 'equidistantPreserveStart' by
[@&#8203;nikolasrieble](https://togithub.com/nikolasrieble) in
[recharts/recharts#3768
- `CartesianAxis`: Throw an invariant when axisIds do not match between
chart and axis components by
[@&#8203;ckifer](https://togithub.com/ckifer)
- `Brush`: add onDragEnd event to Brush component by
[@&#8203;simkesd](https://togithub.com/simkesd) in
[recharts/recharts#3774

##### Fix

-   Active Shape improvements
- `Funnel`: activeShape should work with Tooltip by
[@&#8203;andrewangelle](https://togithub.com/andrewangelle) in
[recharts/recharts#3772
- `Scatter`: activeShape should work with Tooltip by
[@&#8203;andrewangelle](https://togithub.com/andrewangelle) in
[recharts/recharts#3839
- `Pie`: activeShape should work with Tooltip by
[@&#8203;andrewangelle](https://togithub.com/andrewangelle) in
[recharts/recharts#3818
- `RadialBar`: activeShape should work with Tooltip by
[@&#8203;andrewangelle](https://togithub.com/andrewangelle) in
[recharts/recharts#3803
- `CartesianGrid`: Remove offset attribute from lines by
[@&#8203;branberry](https://togithub.com/branberry) in
[recharts/recharts#3854
solves
[recharts/recharts#3810
- `ResponsiveContainer`: style prop is now passed down correctly by
[@&#8203;d-gottlieb](https://togithub.com/d-gottlieb) in
[recharts/recharts#3726
- `Legend`: "Functions are not valid as a React child" error in
<Legend/> when a function is passed as the payload
[#&#8203;3749](https://togithub.com/recharts/recharts/issues/3749) by
[@&#8203;chris-mcdonald-dev](https://togithub.com/chris-mcdonald-dev) in
[recharts/recharts#3750
- `Tooltip`: Fix tooltip position when container uses transform scale by
[@&#8203;MateuszTrN](https://togithub.com/MateuszTrN) in
[recharts/recharts#3748
- `Tooltip`: Tooltip does not include data from all charts when a
separate dataset is passed to chart prop data and specified on
Line/Area/etc prop data by
[@&#8203;andrewangelle](https://togithub.com/andrewangelle) in
[recharts/recharts#3733
fixes
[recharts/recharts#3669

##### Refactor

Impossible to mention all of the great refactoring done this release
thanks to [@&#8203;PavelVanecek](https://togithub.com/PavelVanecek) (33
PRs in one month!!) and others! Notable improvements include
(non-breaking) type safety enhancements and source code file size
reductions, and unit test improvements that will help reduce
regressions.

##### Chore

- Upgrade react-smooth to 2.0.5 - potentially fixes
[recharts/recharts#1135
(edit: this was already fixed)
- Add performance testing tool by
[@&#8203;PavelVanecek](https://togithub.com/PavelVanecek) in
[recharts/recharts#3829
- remove reduceCSSCalc by
[@&#8203;HHongSeungWoo](https://togithub.com/HHongSeungWoo) in
[recharts/recharts#3820

##### Storybook

- Add storybook-addon-performance by
[@&#8203;PavelVanecek](https://togithub.com/PavelVanecek) in
[recharts/recharts#3826
-   many storybook improvements and fixes

#### 🚀 New Contributors (!!) 🚀

- [@&#8203;d-gottlieb](https://togithub.com/d-gottlieb) made their first
contribution in
[recharts/recharts#3726
- [@&#8203;andrewangelle](https://togithub.com/andrewangelle) made their
first contribution in
[recharts/recharts#3733
- [@&#8203;wanisramdani](https://togithub.com/wanisramdani) made their
first contribution in
[recharts/recharts#3751
- [@&#8203;MateuszTrN](https://togithub.com/MateuszTrN) made their first
contribution in
[recharts/recharts#3748
- [@&#8203;chris-mcdonald-dev](https://togithub.com/chris-mcdonald-dev)
made their first contribution in
[recharts/recharts#3750
- [@&#8203;PavelVanecek](https://togithub.com/PavelVanecek) made their
first contribution in
[recharts/recharts#3759
- [@&#8203;simkesd](https://togithub.com/simkesd) made their first
contribution in
[recharts/recharts#3774
- [@&#8203;samtmorgan](https://togithub.com/samtmorgan) made their first
contribution in
[recharts/recharts#3778
- [@&#8203;Shashangbhagat](https://togithub.com/Shashangbhagat) made
their first contribution in
[recharts/recharts#3786
- [@&#8203;morozovkirill](https://togithub.com/morozovkirill) made their
first contribution in
[recharts/recharts#3746
- [@&#8203;branberry](https://togithub.com/branberry) made their first
contribution in
[recharts/recharts#3854
- [@&#8203;HHongSeungWoo](https://togithub.com/HHongSeungWoo) made their
first contribution in
[recharts/recharts#3820

**Full Changelog**:
recharts/recharts@v2.8.0...v2.9.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/SAP/ui5-webcomponents-react).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy44LjEiLCJ1cGRhdGVkSW5WZXIiOiIzNy4xOS4yIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Lukas Harbarth <lukas.harbarth@sap.com>
bodinsamuel pushed a commit to specfy/specfy that referenced this pull request Nov 13, 2023
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [recharts](https://togithub.com/recharts/recharts) | [`2.8.0` ->
`2.9.3`](https://renovatebot.com/diffs/npm/recharts/2.8.0/2.9.3) |
[![age](https://developer.mend.io/api/mc/badges/age/npm/recharts/2.9.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/recharts/2.9.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/recharts/2.8.0/2.9.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/recharts/2.8.0/2.9.3?slim=true)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>recharts/recharts (recharts)</summary>

###
[`v2.9.3`](https://togithub.com/recharts/recharts/releases/tag/v2.9.3)

[Compare
Source](https://togithub.com/recharts/recharts/compare/v2.9.2...v2.9.3)

#### Fix

`Brush`: Fix an issue where after 2.9 `Brush` does not correctly slice
data when using `Line` components - fixes
[recharts/recharts#3929
- thank you [@&#8203;HHongSeungWoo](https://togithub.com/HHongSeungWoo)

###
[`v2.9.2`](https://togithub.com/recharts/recharts/releases/tag/v2.9.2)

[Compare
Source](https://togithub.com/recharts/recharts/compare/v2.9.1...v2.9.2)

Fix another TS issue from 2.9.

##### Fix

- `Line/ActiveDot`: Fix breaking type change for the `onClick` function
of `activeDot` on `Line` - this resolves
[recharts/recharts#3922
- thank you [@&#8203;andrewangelle](https://togithub.com/andrewangelle)
for the quick turnaround

###
[`v2.9.1`](https://togithub.com/recharts/recharts/releases/tag/v2.9.1)

[Compare
Source](https://togithub.com/recharts/recharts/compare/v2.9.0...v2.9.1)

Bug fixes following 2.9.0

#### Fix

- `TypeScript`: fix breaking change in `ActiveShape` types - fixes
[recharts/recharts#3911
- thanks [@&#8203;andrewangelle](https://togithub.com/andrewangelle)
- `CartesianGrid`: fix breaking change where you could no longer render
`CartesianGrid` without a y-axis - fixes
[recharts/recharts#3907
- thanks [@&#8203;akamfoad](https://togithub.com/akamfoad)
- `Line`: fix infinite loop when `strokeDasharray` is `'0'` on `Line` -
fixes
[recharts/recharts#3899
(and maybe others)

**Full Changelog**:
recharts/recharts@v2.9.0...v2.9.1

###
[`v2.9.0`](https://togithub.com/recharts/recharts/releases/tag/v2.9.0)

[Compare
Source](https://togithub.com/recharts/recharts/compare/v2.8.0...v2.9.0)

#### What's Changed

Quite a lot this minor release! We sent out a cry for help and many
answered - thank you so much for that 🙌🏼

This release aims at internal maintainability, long lingering bugs, and
needed improvements. Highlights include equidistant tick improvements,
an active bar feature, and an ~85k/~9kb (gzipped) bundle size reduction
🚀

##### Feat

- `Bar`: Implement activeBar for Bar component by
[@&#8203;andrewangelle](https://togithub.com/andrewangelle) in
[recharts/recharts#3756
- `CartesianGrid`: add `syncWithticks`, `horizonalValues`, and
`verticalValues` props to allow more grid line customization by
[@&#8203;morozovkirill](https://togithub.com/morozovkirill) in
[recharts/recharts#3746
solves
[recharts/recharts#2153
- `CartesianAxis`: Improve interval option 'equidistantPreserveStart' by
[@&#8203;nikolasrieble](https://togithub.com/nikolasrieble) in
[recharts/recharts#3768
- `CartesianAxis`: Throw an invariant when axisIds do not match between
chart and axis components by
[@&#8203;ckifer](https://togithub.com/ckifer)
- `Brush`: add onDragEnd event to Brush component by
[@&#8203;simkesd](https://togithub.com/simkesd) in
[recharts/recharts#3774

##### Fix

-   Active Shape improvements
- `Funnel`: activeShape should work with Tooltip by
[@&#8203;andrewangelle](https://togithub.com/andrewangelle) in
[recharts/recharts#3772
- `Scatter`: activeShape should work with Tooltip by
[@&#8203;andrewangelle](https://togithub.com/andrewangelle) in
[recharts/recharts#3839
- `Pie`: activeShape should work with Tooltip by
[@&#8203;andrewangelle](https://togithub.com/andrewangelle) in
[recharts/recharts#3818
- `RadialBar`: activeShape should work with Tooltip by
[@&#8203;andrewangelle](https://togithub.com/andrewangelle) in
[recharts/recharts#3803
- `CartesianGrid`: Remove offset attribute from lines by
[@&#8203;branberry](https://togithub.com/branberry) in
[recharts/recharts#3854
solves
[recharts/recharts#3810
- `ResponsiveContainer`: style prop is now passed down correctly by
[@&#8203;d-gottlieb](https://togithub.com/d-gottlieb) in
[recharts/recharts#3726
- `Legend`: "Functions are not valid as a React child" error in
<Legend/> when a function is passed as the payload
[#&#8203;3749](https://togithub.com/recharts/recharts/issues/3749) by
[@&#8203;chris-mcdonald-dev](https://togithub.com/chris-mcdonald-dev) in
[recharts/recharts#3750
- `Tooltip`: Fix tooltip position when container uses transform scale by
[@&#8203;MateuszTrN](https://togithub.com/MateuszTrN) in
[recharts/recharts#3748
- `Tooltip`: Tooltip does not include data from all charts when a
separate dataset is passed to chart prop data and specified on
Line/Area/etc prop data by
[@&#8203;andrewangelle](https://togithub.com/andrewangelle) in
[recharts/recharts#3733
fixes
[recharts/recharts#3669

##### Refactor

Impossible to mention all of the great refactoring done this release
thanks to [@&#8203;PavelVanecek](https://togithub.com/PavelVanecek) (33
PRs in one month!!) and others! Notable improvements include
(non-breaking) type safety enhancements and source code file size
reductions, and unit test improvements that will help reduce
regressions.

##### Chore

- Upgrade react-smooth to 2.0.5 - potentially fixes
[recharts/recharts#1135
(edit: this was already fixed)
- Add performance testing tool by
[@&#8203;PavelVanecek](https://togithub.com/PavelVanecek) in
[recharts/recharts#3829
- remove reduceCSSCalc by
[@&#8203;HHongSeungWoo](https://togithub.com/HHongSeungWoo) in
[recharts/recharts#3820

##### Storybook

- Add storybook-addon-performance by
[@&#8203;PavelVanecek](https://togithub.com/PavelVanecek) in
[recharts/recharts#3826
-   many storybook improvements and fixes

#### 🚀 New Contributors (!!) 🚀

- [@&#8203;d-gottlieb](https://togithub.com/d-gottlieb) made their first
contribution in
[recharts/recharts#3726
- [@&#8203;andrewangelle](https://togithub.com/andrewangelle) made their
first contribution in
[recharts/recharts#3733
- [@&#8203;wanisramdani](https://togithub.com/wanisramdani) made their
first contribution in
[recharts/recharts#3751
- [@&#8203;MateuszTrN](https://togithub.com/MateuszTrN) made their first
contribution in
[recharts/recharts#3748
- [@&#8203;chris-mcdonald-dev](https://togithub.com/chris-mcdonald-dev)
made their first contribution in
[recharts/recharts#3750
- [@&#8203;PavelVanecek](https://togithub.com/PavelVanecek) made their
first contribution in
[recharts/recharts#3759
- [@&#8203;simkesd](https://togithub.com/simkesd) made their first
contribution in
[recharts/recharts#3774
- [@&#8203;samtmorgan](https://togithub.com/samtmorgan) made their first
contribution in
[recharts/recharts#3778
- [@&#8203;Shashangbhagat](https://togithub.com/Shashangbhagat) made
their first contribution in
[recharts/recharts#3786
- [@&#8203;morozovkirill](https://togithub.com/morozovkirill) made their
first contribution in
[recharts/recharts#3746
- [@&#8203;branberry](https://togithub.com/branberry) made their first
contribution in
[recharts/recharts#3854
- [@&#8203;HHongSeungWoo](https://togithub.com/HHongSeungWoo) made their
first contribution in
[recharts/recharts#3820

**Full Changelog**:
recharts/recharts@v2.8.0...v2.9.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - "after 4pm every weekday" in timezone
Europe/Paris, Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://developer.mend.io/github/specfy/specfy).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy40Ni4wIiwidXBkYXRlZEluVmVyIjoiMzcuNDYuMCIsInRhcmdldEJyYW5jaCI6ImNob3JlL3Jlbm92YXRlQmFzZUJyYW5jaCJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
GMer78 pushed a commit to GMer78/recharts-1 that referenced this pull request Nov 24, 2023
…charts#3768)

<!--- Provide a general summary of your changes in the Title above -->

## Description

This PR overhauls the existing interval option
`equidistantPreserveStart`

In this variant, we always show the first tick, and starting from the
first, we find the smallest N, for which all n-th ticks can be shown
without collision.

A collision is defined as two overlapping ticks, taking into account
custom tick formatting, a unit, the fontsize, the angle, et cetera (in
alignment with the other existing methods). An overlap is identified if
the end of the previous tick overlaps with the start of the next one.

Downside of this method: 
- When the first tick is very long, hardly any other ticks will be
shown.
- Performance: Instead of iterating over the ticks once, as all other
methods do, this method iterates at most M times, M being the total
amount of available ticks (i.e. for 1000 datapoints, 1000 times). All
other methods are thus more performant. This is a good candidate to
discuss in review or to iterate upon.

<!--- Describe your changes in detail -->

## Related Issue
recharts#3305

<!--- This project only accepts pull requests related to open issues -->
<!--- If suggesting a new feature or change, please discuss it in an
issue first -->
<!--- If fixing a bug, there should be an issue describing it with steps
to reproduce -->
<!--- Please link to the issue here: -->

## How Has This Been Tested?

<!--- Please describe in detail how you tested your changes. -->
<!--- Include details of your testing environment, and the tests you ran
to -->
<!--- see how your change affects other areas of the code, etc. -->

## Screenshots (if appropriate):

## Types of changes

<!--- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->

- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)

## Checklist:

<!--- Go over all the following points, and put an `x` in all the boxes
that apply. -->
<!--- If you're unsure about any of these, don't hesitate to ask. We're
here to help! -->

- [ ] My code follows the code style of this project.
- [ ] My change requires a change to the documentation.
- [ ] I have updated the documentation accordingly.
- [ ] I have added tests to cover my changes.
- [ ] I have added a storybook story or extended an existing story to
show my changes
- [ ] All new and existing tests passed.

---------

Co-authored-by: “Nikolas <“nikolas@rieble.com“>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants