feat(axis): allow pixel domain padding for y axes #1145
feat(axis): allow pixel domain padding for y axes #1145nickofthyme merged 17 commits intoelastic:masterfrom
Conversation
- Add missing yarn call - Pass all yarn script args to jest call in vrt.sh
markov00
left a comment
There was a problem hiding this comment.
I'm a bit confused about when/if the padding is applied to the lower part of the domain.
It looks like it always gets applied to the higher part, and the lower one always gets limited at 0 or at the specified domain min.
This is controlled by the |
- Add new tests - Fix broken tests - Fix error in inverted domain padding logic
| const { scaleMultiplier } = screenspaceMarkerScaleCompressor( | ||
| orderedDomain, | ||
| [2 * desiredPixelPadding, 2 * desiredPixelPadding], | ||
| chartHeight, | ||
| ); | ||
| let paddedDomainLo = orderedDomain[0] - desiredPixelPadding / scaleMultiplier; | ||
| let paddedDomainHigh = orderedDomain[1] + desiredPixelPadding / scaleMultiplier; | ||
|
|
||
| if (constrainDomainPadding) { | ||
| if (paddedDomainLo < 0 && orderedDomain[0] >= 0) { | ||
| const { scaleMultiplier } = screenspaceMarkerScaleCompressor( | ||
| [0, orderedDomain[1]], | ||
| [0, 2 * desiredPixelPadding], | ||
| chartHeight, | ||
| ); | ||
| paddedDomainLo = 0; | ||
| paddedDomainHigh = orderedDomain[1] + desiredPixelPadding / scaleMultiplier; | ||
| } else if (paddedDomainHigh > 0 && orderedDomain[1] <= 0) { | ||
| const { scaleMultiplier } = screenspaceMarkerScaleCompressor( | ||
| [orderedDomain[0], 0], | ||
| [2 * desiredPixelPadding, 0], | ||
| chartHeight, | ||
| ); | ||
| paddedDomainLo = orderedDomain[0] - desiredPixelPadding / scaleMultiplier; | ||
| paddedDomainHigh = 0; | ||
| } | ||
| } |
There was a problem hiding this comment.
Nice solution for adding both a top and bottom padding except when the padding would be the thing that extends the domain over/under the zero axis line 🎉
We might have a situation in the future where the reference line is not the zero line, but something else; for such a case, it would be eventually useful to DRY up and extract the reference value, eg. const intercept = 0; so it's later easy to make configurable. It's not needed in this PR, do you think @markov00 it'd be useful at some point?
There was a problem hiding this comment.
Yep, is definitely a nice to have!
There was a problem hiding this comment.
Great PR Nick 🚀
Please add VRT pics for the full variety of cases, with top and bottom padding applied:
- domain values are both positive and negative
- positive-only and negative-only; both with and without the padding breaching the zero intercept
This also exercises all the code paths where the scale compressor is used
❤️ Good idea, see 7511666 |
markov00
left a comment
There was a problem hiding this comment.
LGTM, thanks Nick for all the changes
|
jenkins test this please |
1 similar comment
|
jenkins test this please |
# [30.0.0](v29.2.0...v30.0.0) (2021-06-04) ### Bug Fixes * **domain:** custom domain should not filter data ([#1181](#1181)) ([76e8dca](76e8dca)), closes [#1129](#1129) * **value_labels:** zero as a valid value for textBorder and borderWidth ([#1182](#1182)) ([a64f333](a64f333)) * annotation tooltip display when remounting specs ([#1167](#1167)) ([8408600](8408600)) * render nodeLabel formatted text into the nodes ([#1173](#1173)) ([b44bdff](b44bdff)) ### Features * **axis:** allow pixel domain padding for y axes ([#1145](#1145)) ([7c1fa8e](7c1fa8e)) * apply value formatter to the default legend item label ([#1190](#1190)) ([71474a5](71474a5)) * **tooltip:** stickTo vertical middle of the cursor ([#1163](#1163)) ([380363b](380363b)), closes [#1108](#1108) * **wordcloud:** click and over events on text ([#1180](#1180)) ([196fb6a](196fb6a)), closes [#1156](#1156) ### BREAKING CHANGES * **value_labels:** the `textBorder` of `ValueFillDefinition` is now optional or a number only
|
🎉 This PR is included in version 30.0.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
# [30.0.0](elastic/elastic-charts@v29.2.0...v30.0.0) (2021-06-04) ### Bug Fixes * **domain:** custom domain should not filter data ([opensearch-project#1181](elastic/elastic-charts#1181)) ([92ba84c](elastic/elastic-charts@92ba84c)), closes [opensearch-project#1129](elastic/elastic-charts#1129) * **value_labels:** zero as a valid value for textBorder and borderWidth ([#1182](elastic/elastic-charts#1182)) ([880fbf1](elastic/elastic-charts@880fbf1)) * annotation tooltip display when remounting specs ([opensearch-project#1167](elastic/elastic-charts#1167)) ([7163951](elastic/elastic-charts@7163951)) * render nodeLabel formatted text into the nodes ([opensearch-project#1173](elastic/elastic-charts#1173)) ([0de9688](elastic/elastic-charts@0de9688)) ### Features * **axis:** allow pixel domain padding for y axes ([#1145](elastic/elastic-charts#1145)) ([6787728](elastic/elastic-charts@6787728)) * apply value formatter to the default legend item label ([opensearch-project#1190](elastic/elastic-charts#1190)) ([20108bb](elastic/elastic-charts@20108bb)) * **tooltip:** stickTo vertical middle of the cursor ([#1163](elastic/elastic-charts#1163)) ([b858fb3](elastic/elastic-charts@b858fb3)), closes [opensearch-project#1108](elastic/elastic-charts#1108) * **wordcloud:** click and over events on text ([opensearch-project#1180](elastic/elastic-charts#1180)) ([adbf341](elastic/elastic-charts@adbf341)), closes [opensearch-project#1156](elastic/elastic-charts#1156) ### BREAKING CHANGES * **value_labels:** the `textBorder` of `ValueFillDefinition` is now optional or a number only
Summary
Adds support for pixel domain padding in the vertical/y axis, added to the existing padding options of domain value and domain ratio value.
BREAKING CHANGES:
domain.paddingnow only takes anumbervalue. If you are using a percent-based padding such as'10%'please setdomain.paddingto0.1anddomain.paddingUnittoDomainPaddingUnit.DomainRatio.Details
This pr adds the ability to set the y domain padding to a fixed pixel value in the spatial or screen space. Currently, the domain is allowed to be set to a domain value or domain percentage value with the misaligned documentation.
Adds
paddingUnitas typeDomainPaddingUnitto domain options rather than parsing units from a string.Adds
domainPixelPaddingandconstrainDomainPaddingas options to continuous scale, but does not apply to time scales.Connected issues
Closes #1144
Checklist
src/index.ts(and stories only import from../srcexcept for test data & storybook)