pub struct GeomLabel {
pub size: f64,
pub color: (u8, u8, u8),
pub fill: (u8, u8, u8),
pub alpha: f64,
pub padding: f64,
pub hjust: f64,
pub vjust: f64,
pub fontfamily: String,
pub check_overlap: bool,
pub wrap_width: Option<f64>,
pub line_height: f64,
pub radius: f64,
}Expand description
Label geometry — like text but with a background rectangle.
Fields§
§size: f64§color: (u8, u8, u8)§fill: (u8, u8, u8)§alpha: f64§padding: f64§hjust: f64Horizontal justification: 0.0 = left, 0.5 = center (default), 1.0 = right.
vjust: f64Vertical justification: 0.0 = bottom, 0.5 = middle (default), 1.0 = top.
fontfamily: StringFont family name (informational; actual rendering depends on backend).
check_overlap: boolWhen true, skip drawing labels that overlap previously drawn labels.
wrap_width: Option<f64>Word-wrap width in px (ggtext / str_wrap behaviour), measured with
the theme’s text metrics (crate::render::text::text_width). The
background box grows to fit however many lines result, plus
padding. None (the default) never wraps — unchanged from
pre-#176 behaviour.
line_height: f64Line height as a multiple of size, applied between wrapped lines.
Only matters when wrap_width is set and the label wraps to more
than one line.
radius: f64Corner radius in px for the background box (ggplot2
geom_label(label.r), #176). 0.0 (the default) is a plain
rectangle, unchanged from pre-#176 behaviour.
Implementations§
Source§impl GeomLabel
impl GeomLabel
pub fn with_hjust(self, hjust: f64) -> Self
pub fn with_vjust(self, vjust: f64) -> Self
pub fn with_fontfamily(self, family: &str) -> Self
pub fn with_check_overlap(self, check: bool) -> Self
Sourcepub fn with_wrap(self, width_px: f64) -> Self
pub fn with_wrap(self, width_px: f64) -> Self
Word-wrap the label to lines no wider than width_px, growing the
background box to fit (#176).
Sourcepub fn with_line_height(self, line_height: f64) -> Self
pub fn with_line_height(self, line_height: f64) -> Self
Line height as a multiple of size for wrapped text (default 1.2).
Sourcepub fn with_radius(self, radius_px: f64) -> Self
pub fn with_radius(self, radius_px: f64) -> Self
Corner radius in px for the background box (ggplot2 label.r, #176).
Trait Implementations§
Source§impl Geom for GeomLabel
impl Geom for GeomLabel
Source§fn 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>
Source§fn required_aes(&self) -> Vec<Aesthetic>
fn required_aes(&self) -> Vec<Aesthetic>
Source§fn default_stat(&self) -> Box<dyn Stat>
fn default_stat(&self) -> Box<dyn Stat>
Source§fn default_position(&self) -> Box<dyn Position>
fn default_position(&self) -> Box<dyn Position>
Source§fn default_params(&self) -> GeomParams
fn default_params(&self) -> GeomParams
Source§fn apply_element_geom(&mut self, el: &ElementGeom)
fn apply_element_geom(&mut self, el: &ElementGeom)
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.Source§fn set_series_color(&mut self, _color: (u8, u8, u8))
fn set_series_color(&mut self, _color: (u8, u8, u8))
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.Source§fn include_zero_baseline(&self) -> bool
fn include_zero_baseline(&self) -> bool
y is explicitly mapped (bars/columns/area/histograms — as
in ggplot2). Default false.Source§fn allows_infinite(&self) -> bool
fn allows_infinite(&self) -> bool
-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.Source§fn keeps_na_as_break(&self) -> bool
fn keeps_na_as_break(&self) -> bool
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.Source§fn consumes_tooltips(&self) -> bool
fn consumes_tooltips(&self) -> bool
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.Source§fn setup_data(&self, _data: &mut DataFrame, _warnings: &mut Vec<String>)
fn setup_data(&self, _data: &mut DataFrame, _warnings: &mut Vec<String>)
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.Source§fn inherit_aes(&self) -> bool
fn inherit_aes(&self) -> bool
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.Source§fn mapped_only_columns(&self) -> &'static [&'static str]
fn mapped_only_columns(&self) -> &'static [&'static str]
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"].Source§fn 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>
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.Auto Trait Implementations§
impl Freeze for GeomLabel
impl RefUnwindSafe for GeomLabel
impl Send for GeomLabel
impl Sync for GeomLabel
impl Unpin for GeomLabel
impl UnsafeUnpin for GeomLabel
impl UnwindSafe for GeomLabel
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more