vega-lite icon indicating copy to clipboard operation
vega-lite copied to clipboard

Allow config to set default scale.zero per marktype

Open yhoonkim opened this issue 1 year ago • 6 comments

scale.zero is true as default for x and y channels if the quantitative field is not binned and no custom domain is provided; false otherwise. (https://vega.github.io/vega-lite/docs/scale.html ) Though, for some range-based-marktype (e.g., point, box plot). zero: true might not be useful default; if the data are mostly distributed 10M~11M and if the scale includes zero, the point marks for those data will look like just a single dot.

Even the example scatter plot in VL editor uses zero: false. If we delete it, it looks like this: image

-- Suggestion Assuming that many VL users may be already used to the current default, I would like to suggest adding config.scale.zero to change the default instead of changing system default.

{
  "config": { "scale": {"zero": "always" } } 
}

-> Keep the system defulat: scale.zero is true as default for x and y channels if the quantitative field is not binned and no custom domain is provided; false otherwise.

{
  "config": { "scale": {"zero": "range-mark-only" } } 
}

-> scale.zero is true as default for y(/x) channel if the quantitative field is not binned and no custom domain is provided and it is vertical (/horizontal) bar and area; false otherwise.

CC; @kanitw

yhoonkim avatar Jul 27 '22 20:07 yhoonkim

For implementation, you can look at zero() in src/compile/scale/properties.ts.

kanitw avatar Jul 27 '22 21:07 kanitw

Btw, look at existing behavior, I just realize that "always" isn't very accurate.

So maybe:

zero: "all-marks" | "bar-and-area-only" 

kanitw avatar Jul 27 '22 21:07 kanitw

cc: @domoritz @arvind @jheer any opinion about the config name?

kanitw avatar Jul 27 '22 21:07 kanitw

If we only have two options, I wonder whether we could consider a Boolean.

Otherwise I think all marks, and range marks or bar and area makes sense. I don't think we need to say range marks only.

domoritz avatar Aug 09 '22 02:08 domoritz

FWIW, https://github.com/vega/vega/issues/1471 is related to this. (Adding dynamic zero with threshold is probably gonna be a better default than always off.)

In terms of sequencing, I think add this config in Vega-Lite first would be easier (since it's simpler).

kanitw avatar Aug 09 '22 04:08 kanitw

Some more thoughts:

  • Btw, I think "range mark" is a bit vague -- I don't think we have use the key word anywhere else.

  • Suppose we add dynamic default in the future with some syntax like {threshold: 0.25} (it might not be this syntax, but we need to make our syntax future proof).

  • Thinking more, we could also just add zero: boolean; to config.scale but make it not applicable to non-range bar/area

    • Basically config.scale.zero will be applicable for point/line, etc., but not for non-range bar/area chart.
    • For ranged bar (e.g., gantt chart and ranged area, we also don't need to include zero), so config.scale.zero should also be applicable to them.

kanitw avatar Aug 09 '22 04:08 kanitw

fixed in https://github.com/vega/vega-lite/pull/8354

kanitw avatar Aug 16 '22 19:08 kanitw