pub trait Scale: Send + Sync {
Show 30 methods
// Required methods
fn aesthetic(&self) -> Aesthetic;
fn train(&mut self, values: &[Value]);
fn map(&self, value: &Value) -> f64;
fn breaks(&self) -> Vec<(f64, String)>;
fn name(&self) -> &str;
fn set_name(&mut self, name: &str);
fn clone_box(&self) -> Box<dyn Scale>;
// Provided methods
fn transform(&self, value: &Value) -> Value { ... }
fn is_discrete(&self) -> bool { ... }
fn map_to_color(&self, _value: &Value) -> Option<(u8, u8, u8)> { ... }
fn na_fill_pattern(&self) -> Option<FillPattern> { ... }
fn is_na_break(&self, _label: &str) -> bool { ... }
fn map_to_shape(&self, _value: &Value) -> Option<PointShape> { ... }
fn map_to_linetype(&self, _value: &Value) -> Option<Linetype> { ... }
fn map_to_size(&self, _value: &Value) -> Option<f64> { ... }
fn map_to_alpha(&self, _value: &Value) -> Option<f64> { ... }
fn sec_axis(&self) -> Option<&SecAxis> { ... }
fn set_default_locale(&mut self, _locale: &Locale) { ... }
fn locale(&self) -> Option<&Locale> { ... }
fn format_value(&self, _value: &Value) -> Option<String> { ... }
fn set_limits(&mut self, _min: f64, _max: f64) { ... }
fn filter_limits(&self) -> Option<(f64, f64)> { ... }
fn domain(&self) -> Option<(f64, f64)> { ... }
fn expanded_domain(&self) -> Option<(f64, f64)> { ... }
fn axis_position_opposite(&self) -> bool { ... }
fn set_expand(&mut self, _mult: f64, _add: f64) { ... }
fn map_fraction_to_size(&self, _fraction: f64) -> Option<f64> { ... }
fn map_fraction_to_alpha(&self, _fraction: f64) -> Option<f64> { ... }
fn reset_training(&mut self) { ... }
fn validate(&self, _warnings: &mut Vec<String>) { ... }
}Expand description
Trait for scales that map data values to visual properties.
Required Methods§
Provided Methods§
Sourcefn is_discrete(&self) -> bool
fn is_discrete(&self) -> bool
Whether this is a discrete scale.
Sourcefn map_to_color(&self, _value: &Value) -> Option<(u8, u8, u8)>
fn map_to_color(&self, _value: &Value) -> Option<(u8, u8, u8)>
Map a data value to an RGB color. Default returns None.
Sourcefn na_fill_pattern(&self) -> Option<FillPattern>
fn na_fill_pattern(&self) -> Option<FillPattern>
A pattern fill for a value this scale draws with its flat na
colour (Value::Na, or whatever else a scale treats that way) —
ScaleFillBinned::na_pattern (#206) is the only implementor so
far. Default None: the flat colour from
map_to_color wins, unchanged. A geom that
draws filled areas (geom_sf/geom_polygon/geom_rect/
geom_tile) checks this before falling back to map_to_color’s
na-colour branch, and the legend’s “no data” key checks it too.
Sourcefn is_na_break(&self, _label: &str) -> bool
fn is_na_break(&self, _label: &str) -> bool
Whether label (a breaks label) is this scale’s
“no data” legend key, so the legend draws that one key with
na_fill_pattern instead of its ordinary
flat swatch colour. Default false (no scale without an na key
needs this). ScaleFillBinned overrides it.
Sourcefn map_to_shape(&self, _value: &Value) -> Option<PointShape>
fn map_to_shape(&self, _value: &Value) -> Option<PointShape>
Map a data value to a point shape. Default returns None.
Sourcefn map_to_linetype(&self, _value: &Value) -> Option<Linetype>
fn map_to_linetype(&self, _value: &Value) -> Option<Linetype>
Map a data value to a linetype. Default returns None.
Sourcefn map_to_size(&self, _value: &Value) -> Option<f64>
fn map_to_size(&self, _value: &Value) -> Option<f64>
Map a data value to a point size (radius in pixels). Default returns None.
Sourcefn map_to_alpha(&self, _value: &Value) -> Option<f64>
fn map_to_alpha(&self, _value: &Value) -> Option<f64>
Map a data value to an alpha (opacity) value. Default returns None.
Sourcefn set_default_locale(&mut self, _locale: &Locale)
fn set_default_locale(&mut self, _locale: &Locale)
Adopt a plot-level default Locale for the
default break labels (number marks, month names, date formats), unless
the scale already has its own. Called by the plot builder when
GGPlot::locale is set. Default: ignored
(scales without numeric/date labels).
Sourcefn locale(&self) -> Option<&Locale>
fn locale(&self) -> Option<&Locale>
The locale this scale’s default labels are rendered with, if any.
Sourcefn format_value(&self, _value: &Value) -> Option<String>
fn format_value(&self, _value: &Value) -> Option<String>
Format a single raw (pre-scale-transform) data value for a
per-mark attribute (data-fvalue/data-fx, B2-4) or a tooltip
template placeholder — e.g. a de-DE currency string, or a datetime
x’s ISO/locale date, independent of how the axis itself abbreviates
its break labels. None for a missing/non-finite value, or a scale
with nothing meaningful to format (default: every scale except
continuous position/size/linewidth and datetime/colour-continuous,
which override this).
Sourcefn set_limits(&mut self, _min: f64, _max: f64)
fn set_limits(&mut self, _min: f64, _max: f64)
Override the trained domain limits (used by coord_cartesian zoom).
Sourcefn filter_limits(&self) -> Option<(f64, f64)>
fn filter_limits(&self) -> Option<(f64, f64)>
Return OOB filter limits if this scale was created with explicit limits (e.g., via xlim/ylim). Data outside these limits should be removed before stats.
Sourcefn domain(&self) -> Option<(f64, f64)>
fn domain(&self) -> Option<(f64, f64)>
Return the trained data domain (min, max) for continuous scales. Used by the colorbar legend to pass data-space values to map_to_color().
Sourcefn expanded_domain(&self) -> Option<(f64, f64)>
fn expanded_domain(&self) -> Option<(f64, f64)>
The data values at the panel edges (normalized 0 and 1) for a trained
continuous position scale — the limits after expansion, in the scale’s
transformed space. None for discrete / untrained / non-position scales.
Sourcefn axis_position_opposite(&self) -> bool
fn axis_position_opposite(&self) -> bool
Whether this axis is drawn on the opposite side (x → top, y → right).
Sourcefn set_expand(&mut self, _mult: f64, _add: f64)
fn set_expand(&mut self, _mult: f64, _add: f64)
Set the expansion multiplier/additive constant (R’s expand = c(mult, add)), applied symmetrically to both ends. Used by
CoordSf::train_scales (expand(false) passes (0.0, 0.0)) to pin
an explicit xlim/ylim to the panel exactly. Default: no-op
(discrete / non-position scales have no expansion to set).
Sourcefn map_fraction_to_size(&self, _fraction: f64) -> Option<f64>
fn map_fraction_to_size(&self, _fraction: f64) -> Option<f64>
Map an already-computed [0, 1] scale fraction (as returned
alongside each label by breaks) directly to an
output size, bypassing the round trip through map — a
discrete-style legend key only has the break’s rendered label, not
its original data value, so a continuous scale can’t recover the
fraction by re-mapping the label text. Default: None.
Sourcefn map_fraction_to_alpha(&self, _fraction: f64) -> Option<f64>
fn map_fraction_to_alpha(&self, _fraction: f64) -> Option<f64>
Map an already-computed [0, 1] scale fraction directly to an output
alpha (opacity), the map_fraction_to_size
equivalent for a continuous alpha scale’s discrete-style legend keys —
see that method’s doc for why the fraction, not the label, is the
input. Default: None.
Sourcefn reset_training(&mut self)
fn reset_training(&mut self)
Reset training state so the scale can be retrained on new data.
Sourcefn validate(&self, _warnings: &mut Vec<String>)
fn validate(&self, _warnings: &mut Vec<String>)
Validate this scale’s configuration once training is complete (e.g.
a transform undefined at the domain’s own limits) and push a
human-readable warning for each problem found. Called once per scale
after the final training pass, with the plot’s warnings sink —
map/map_to_size run per mark at draw time and have no such
access, so a scale-level problem must be reported here instead.
Default: no-op.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".