-
Notifications
You must be signed in to change notification settings - Fork 120
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
feat(axis): allow pixel domain padding for y axes #1145
Conversation
- Add missing yarn call - Pass all yarn script args to jest call in vrt.sh
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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
src/scales/scale_continuous.ts
Outdated
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yep, is definitely a nice to have!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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.padding
now only takes anumber
value. If you are using a percent-based padding such as'10%'
please setdomain.padding
to0.1
anddomain.paddingUnit
toDomainPaddingUnit.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
paddingUnit
as typeDomainPaddingUnit
to domain options rather than parsing units from a string.Adds
domainPixelPadding
andconstrainDomainPadding
as options to continuous scale, but does not apply to time scales.Connected issues
Closes #1144
Checklist
src/index.ts
(and stories only import from../src
except for test data & storybook)