pub trait Geom: Send + Sync {
Show 16 methods
// Required methods
fn draw(
&self,
data: &DataFrame,
coord: &dyn Coord,
scales: &ScaleSet,
theme: &Theme,
backend: &mut dyn DrawBackend,
) -> Result<(), RenderError>;
fn required_aes(&self) -> Vec<Aesthetic>;
fn default_stat(&self) -> Box<dyn Stat>;
fn default_position(&self) -> Box<dyn Position>;
fn default_params(&self) -> GeomParams;
fn name(&self) -> &str;
// Provided methods
fn set_series_color(&mut self, _color: (u8, u8, u8)) { ... }
fn apply_element_geom(&mut self, _el: &ElementGeom) { ... }
fn include_zero_baseline(&self) -> bool { ... }
fn allows_infinite(&self) -> bool { ... }
fn keeps_na_as_break(&self) -> bool { ... }
fn consumes_tooltips(&self) -> bool { ... }
fn setup_data(&self, _data: &mut DataFrame, _warnings: &mut Vec<String>) { ... }
fn inherit_aes(&self) -> bool { ... }
fn mapped_only_columns(&self) -> &'static [&'static str] { ... }
fn validate_layer(
&self,
_pre_stat_columns: &[String],
_stat_name: &str,
) -> Result<(), String> { ... }
}Expand description
Trait for geometric objects that draw data on the plot.
Required Methods§
Sourcefn draw(
&self,
data: &DataFrame,
coord: &dyn Coord,
scales: &ScaleSet,
theme: &Theme,
backend: &mut dyn DrawBackend,
) -> Result<(), RenderError>
fn draw( &self, data: &DataFrame, coord: &dyn Coord, scales: &ScaleSet, theme: &Theme, backend: &mut dyn DrawBackend, ) -> Result<(), RenderError>
Draw this geometry.
Sourcefn required_aes(&self) -> Vec<Aesthetic>
fn required_aes(&self) -> Vec<Aesthetic>
Required aesthetics.
Sourcefn default_stat(&self) -> Box<dyn Stat>
fn default_stat(&self) -> Box<dyn Stat>
Default stat for this geom.
Sourcefn default_position(&self) -> Box<dyn Position>
fn default_position(&self) -> Box<dyn Position>
Default position adjustment.
Sourcefn default_params(&self) -> GeomParams
fn default_params(&self) -> GeomParams
Non-mapped visual defaults.
Provided Methods§
Sourcefn set_series_color(&mut self, _color: (u8, u8, u8))
fn set_series_color(&mut self, _color: (u8, u8, u8))
Apply a brand/primary color to this geom’s single-series default (its
color or fill). The build pipeline calls this only when the layer has
no color/fill aesthetic mapped, so an explicit mapping always wins. The
default is a no-op; series geoms override it.
Sourcefn apply_element_geom(&mut self, _el: &ElementGeom)
fn apply_element_geom(&mut self, _el: &ElementGeom)
Recolour this geom’s built-in default colour/fill from the theme’s
ink/paper/accent palette (B2-7’s element_geom), called once per
layer before set_series_color — and only
when the layer was not configured explicitly (geom_*_with(...);
the build pipeline gates the call on the same explicit_style flag
set_series_color’s brand-colour application is gated on). That
gate, not a field-value comparison, is what keeps an explicit colour
untouched: a geom that honours this replaces a field still at its
own hard-coded default (black/(50, 50, 50) → ink, white →
paper) by comparing its value, which cannot by itself tell an
explicitly-set colour that happens to equal that default (e.g.
GeomPoint { color: (0, 0, 0), .. } under geom_point_with) apart
from one that was simply never touched — only skipping the call
entirely for an explicitly-configured layer closes that gap (review
PR#141 finding 4). Default no-op; None fields of ElementGeom
change nothing, so the default theme (no ink/paper/accent set)
stays byte-identical.
Sourcefn include_zero_baseline(&self) -> bool
fn include_zero_baseline(&self) -> bool
Whether this geom draws from a 0 baseline, so the Y scale should include
0 even when y is explicitly mapped (bars/columns/area/histograms — as
in ggplot2). Default false.
Sourcefn allows_infinite(&self) -> bool
fn allows_infinite(&self) -> bool
Whether -Inf/Inf position values are meaningful for this geom
(ggplot2: “extend to the panel edge”). Rows with infinite positions are
otherwise dropped with a warning before stats run. NaN is always
dropped — unless Geom::keeps_na_as_break says otherwise. Default
false; geom_rect returns true.
Sourcefn keeps_na_as_break(&self) -> bool
fn keeps_na_as_break(&self) -> bool
Whether a row with a non-finite position is a break rather than a
removal (ggplot2’s GeomPath/GeomLine NA handling): the row still
counts toward the “removed N rows” warning, but it is not deleted
from the built DataFrame, so the geom’s own per-group point list
still contains it — as a non-finite pixel position after the scale
and coordinate transform, which crate::render::backend::DrawBackend::draw_line
splits on into separate polylines (ggplot2’s NA-break semantics)
instead of silently joining the finite points across the gap.
Default false (the row is dropped, as for every other geom);
line/path/step return true.
Sourcefn consumes_tooltips(&self) -> bool
fn consumes_tooltips(&self) -> bool
Whether this geom calls [set_row_extras] (so it reads
Aes::tooltip and
Aes::data_attr, and a
GGPlot::tooltip template on it has
a visible effect). Default false; the build pipeline warns when a
tooltip() template is set on a layer whose geom returns false
here (review PR#141 finding 6, LOW: a template silently did nothing
on e.g. geom_area/geom_boxplot/geom_ribbon). Point, segment,
curve, path, line, hex, polygon, sf, rect/tile and col/bar/
histogram return true.
Sourcefn setup_data(&self, _data: &mut DataFrame, _warnings: &mut Vec<String>)
fn setup_data(&self, _data: &mut DataFrame, _warnings: &mut Vec<String>)
Geom-specific data preparation after the stat and position steps but
before scale training (ggplot2’s GeomX$setup_data) — e.g. a tile adds
its xmin/xmax/ymin/ymax extents so continuous scales train on
them. warnings is the layer’s own build-warnings sink (B3-5: added
so GeomBoxplot can warn on an unparsable outlier value here, the
same channel every other build warning uses — never eprintln!).
Default: no-op.
Sourcefn inherit_aes(&self) -> bool
fn inherit_aes(&self) -> bool
Whether the layer inherits the plot-level aesthetic mapping (ggplot2’s
inherit.aes). Reference-line geoms return false, as in ggplot2, so a
plot-level color/x/y mapping does not leak into a geom_hline.
Default true.
Sourcefn mapped_only_columns(&self) -> &'static [&'static str]
fn mapped_only_columns(&self) -> &'static [&'static str]
Canonical column names this geom only reads when the user actually
mapped the corresponding aesthetic (D3, B3-5) — never from a raw
column that merely happens to share the name (e.g. a SQL alias
literally called lower). build_layer drops any of these columns
right after resolve_mappings unless the aesthetic was mapped.
Default empty; GeomBoxplot returns ["lower", "middle", "upper", "outliers"].
Sourcefn validate_layer(
&self,
_pre_stat_columns: &[String],
_stat_name: &str,
) -> Result<(), String>
fn validate_layer( &self, _pre_stat_columns: &[String], _stat_name: &str, ) -> Result<(), String>
Stat-dependent layer validation beyond required_aes
(B3-5): called once per layer with the resolved (pre-stat, post-D3-drop)
column names and the layer’s stat name, before the stat runs. Default
no-op. GeomBoxplot requires lower/middle/upper to be mapped
under stat="identity", else y.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".