plot icon indicating copy to clipboard operation
plot copied to clipboard

More warnings

Open mbostock opened this issue 3 years ago • 9 comments

Continuing from #536…

  • [ ] undefined or invalid data #493
  • [ ] mix-sign log scale #534
  • [ ] too many ordinal values #74
  • [ ] cycling the ordinal color scale because we have more categories than colors
  • [ ] infinite values #528
  • [ ] on-the-fly data coercion #532
  • [ ] seemingly parallel facet data #1009
  • [ ] insets that result in invisible rects
  • [ ] insets and margins that result in scale range collapse
  • [ ] using ordinal data with line or area?
  • [ ] sort: {y:"x"} when y is not ordinal (suggested by @yurivish)
  • [ ] warn when requesting a color legend on non-scaled color (#2013)

mbostock avatar Feb 11 '22 06:02 mbostock

We might also want a warning for line and area marks when a channel is temporal but not in monotonic order (within a series). But you’ll presumably want a way to disable it in some rare cases and I’m not sure how we’d do that, unless maybe the mark can check if the sort option is null.

mbostock avatar Mar 02 '22 19:03 mbostock

Suggestion:

Warning for the cases where mark data is not parallel to facet data. I.e., cases that are warned about here:

When the include or exclude facet mode is chosen, the mark data must be parallel to the facet data: the mark data must have the same length and order as the facet data. If the data are not parallel, then the wrong data may be shown in each facet. The default auto therefore requires strict equality (===) for safety, and using the facet data as mark data is recommended when using the exclude facet mode. (To construct parallel data safely, consider using array.map on the facet data.)

kentr avatar Mar 07 '22 23:03 kentr

It would be great to surface a warning when someone uses Plot.barY with a continuous x (which results in over-labeling the ticks on the x axis).

Screen Shot 2022-03-16 at 2 39 50 PM .

Relatedly Plot.barX with a continuous y. Maybe even Plot.groupX with a continuous x and Plot.groupY with a continuous y (nudging them towards binning continuous values)?

mkfreeman avatar Mar 16 '22 18:03 mkfreeman

@mkfreeman Here’s an example of the pattern you describe:

untitled (20)

Plot.barY([[1, 1], [2, 2], [3, 3]], {x: "0", y: "1"}).plot()

The warning would be triggered by values.some(isNumeric) here:

https://github.com/observablehq/plot/blob/66142e2c096439cffea0ed390de13c6cf1545388/src/scales.js#L150-L152

I recall considering this warning earlier, and I think I didn’t do it because the default x channel for Plot.barY is indexOf which is numeric. We wouldn’t want the barY shorthand to generate a warning. That said, we could be more selective in our warning:

  • If the channel is numeric and there are any gaps between numbers? Though this would require detecting when the numbers are integers, and presumably would want to support both ascending and descending sequences. Alternatively we could just special-case 0, 1, 2, 3, … but that seems like cheating.
  • If the channel is numeric and there are more than TK distinct values (high cardinality)?
  • Or more generally if there are more than TK distinct values?

Related #74 which is also about high-cardinality ordinal domains. Though that’s not the only problem here—the other reason we want to warn about numeric data being treated as ordinal is that it makes it hard to see missing values (gaps in the data).

mbostock avatar Mar 16 '22 20:03 mbostock

Thanks for elaborating @mbostock -- agreed that we don't want the shorthand to generate a warning. I think If the channel is numeric and there are any gaps between numbers? would still miss the common case of too many ticks being drawn (as you noted, #74). I'm not sure if there's a simple way to check if the shorthand is being used (e.g., if the channel was set explicitly or not), but perhaps we could provide a warning if the channel is numeric and it was explicitly declared (using a string or function?).

mkfreeman avatar Mar 17 '22 14:03 mkfreeman

perhaps we could provide a warning if the channel is numeric and it was explicitly declared

Generally speaking we try to do the opposite, which is to declare warnings in cases where the Plot specification is ambiguous (underspecified), such as when the scale type is not explicitly declared. This provides a consistent way to suppress warnings by stating more explicitly what you intend to happen (you always add to a specification to suppress a warning, not remove). In other words I don’t think we should give the shorthand a special exemption around this error; if you specify x: (d, i) => i explicitly then I wouldn’t want a warning either.

mbostock avatar Mar 17 '22 15:03 mbostock

Just wanted to add to @kentr 's suggestion above that we provide a warning when the arrays aren't strictly equal (which happens if you apply the same filter function to the facet and mark data). Example notebook here: https://observablehq.com/d/a869f84e397d44b7

mkfreeman avatar Jul 26 '22 18:07 mkfreeman

  • [ ] using a log scale on marks that implicitly use a zero baseline (#1039)

Fil avatar Aug 30 '22 08:08 Fil

It would be nice if there were a warning attached to any plot that has a Plot.geo mark but has not specified a projection, instructing the user to specify projection: null to disable the warning. Right now making a plot with Plot.geo(geojson).plot() produces an empty plot.

I mentioned this on the d3js slack and @fil added some nuance:

Note that you can use Plot.geo in conjunction with a dot mark (or any other mark that defines x and y scales); in that case the geo will be projected onto the x/y coordinate system. The warning would only be necessary if there is geo and no projection nor x/y scales.

yurivish avatar Dec 13 '22 21:12 yurivish