pub struct ChartStackingProps {
pub variant: ChartStackingVariant,
pub series: Vec<SeriesDef>,
pub x_axis: Vec<AxisDef>,
pub y_axis: Vec<AxisDef>,
pub grid: GridConfig,
pub width: f64,
pub height: f64,
pub class: MaybeProp<String>,
}Expand description
Props for the ChartStacking component.
Stack series when each category total is meaningful and segments show contribution.
Decision guide: Same stack_group id → stacked. Negative values → StackOffset::Diverging
(bar default). Share of whole → StackOffset::Expand. Unsure about layer order → try
StackOrder::Ascending.
§When to use
Assign the same stack_group on multiple series to stack segments per
category. Bar stacks default to [StackOffset::Diverging] for signed data;
lines and areas default to [StackOffset::None].
§Usage
- Assign the same
stack_groupstring on series that should stack per category. - Set
stack_offseton any member —Divergingfor signed bars,Expandfor 100% stacks. - Set
stack_orderwhen layer sequence at the baseline matters. - Use
ChartStackingpreview variants to compare bar vs area stacking side by side.
§Best Practices
§Do’s
- Include zero in the value axis domain for diverging stacks with negatives.
- Use
stack_order: Ascendingwhen the smallest segment should anchor the baseline. - Link to
area-chartpercent stacked example for normalized area stacks.
§Don’ts
- Do not stack unrelated series — they must share categories and a stack group id.
- Do not use expand offset when absolute totals must remain readable.
§Examples
§Stacked bar chart (diverging default)
Three stacked segments per month including signed adjustments. Bar stacks default to diverging offset so negative segments mirror below the baseline.
use crate::ChartStacking;
use crate::preview::fixtures::{full_grid, revenue_y_axis, stacked_bar_series, stacked_bar_x_axis};
view! {
<div data-testid="chart-stacking-preview">
<ChartStacking
variant=ChartStackingVariant::StackedBar
series=stacked_bar_series()
x_axis=vec![stacked_bar_x_axis()]
y_axis=vec![revenue_y_axis()]
grid=full_grid()
width=560.0
height=320.0
/>
</div>
}§Stacked area chart
Multiple filled series sharing a stack group. Compare with area-chart-percent-preview
when you need stack_offset: Expand normalization.
use crate::ChartStacking;
use crate::preview::fixtures::{full_grid, month_categories, quarter_x_axis, revenue_y_axis, stacked_area_series};
view! {
<div data-testid="chart-stacking-area-preview">
<ChartStacking
variant=ChartStackingVariant::StackedArea
series=stacked_area_series()
x_axis=vec![{
let mut a = quarter_x_axis();
a.data = Some(month_categories());
a
}]
y_axis=vec![revenue_y_axis()]
grid=full_grid()
width=560.0
height=320.0
/>
</div>
}§Optional Props
- variant:
ChartStackingVariant- Which stacking example to render.
- series:
Vec<crate::SeriesDef>- Series with shared
stack_groupidentifiers.
- Series with shared
- x_axis:
Vec<crate::AxisDef>- X-axis definitions.
- y_axis:
Vec<crate::AxisDef>- Y-axis definitions.
- grid:
crate::GridConfig- Background grid configuration.
- width:
f64- Chart width in pixels.
- height:
f64- Chart height in pixels.
- class:
impl Into<MaybeProp<String>>- Optional CSS class on the root element.
Fields§
§variant: ChartStackingVariantWhich stacking example to render.
series: Vec<SeriesDef>Series with shared stack_group identifiers.
x_axis: Vec<AxisDef>X-axis definitions.
y_axis: Vec<AxisDef>Y-axis definitions.
grid: GridConfigBackground grid configuration.
width: f64Chart width in pixels.
height: f64Chart height in pixels.
class: MaybeProp<String>Optional CSS class on the root element.
Implementations§
Source§impl ChartStackingProps
impl ChartStackingProps
Sourcepub fn builder() -> ChartStackingPropsBuilder<((), (), (), (), (), (), (), ())>
pub fn builder() -> ChartStackingPropsBuilder<((), (), (), (), (), (), (), ())>
Create a builder for building ChartStackingProps.
On the builder, call .variant(...)(optional), .series(...)(optional), .x_axis(...)(optional), .y_axis(...)(optional), .grid(...)(optional), .width(...)(optional), .height(...)(optional), .class(...)(optional) to set the values of the fields.
Finally, call .build() to create the instance of ChartStackingProps.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for ChartStackingProps
impl RefUnwindSafe for ChartStackingProps
impl Send for ChartStackingProps
impl Sync for ChartStackingProps
impl Unpin for ChartStackingProps
impl UnsafeUnpin for ChartStackingProps
impl UnwindSafe for ChartStackingProps
Blanket Implementations§
Source§impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
impl<S, D, Swp, Dwp, T> AdaptInto<D, Swp, Dwp, T> for Swhere
T: Real + Zero + Arithmetics + Clone,
Swp: WhitePoint<T>,
Dwp: WhitePoint<T>,
D: AdaptFrom<S, Swp, Dwp, T>,
Source§fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
fn adapt_into_using<M>(self, method: M) -> Dwhere
M: TransformMatrix<T>,
Source§fn adapt_into(self) -> D
fn adapt_into(self) -> D
Source§impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
impl<T, C> ArraysFrom<C> for Twhere
C: IntoArrays<T>,
Source§fn arrays_from(colors: C) -> T
fn arrays_from(colors: C) -> T
Source§impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
impl<T, C> ArraysInto<C> for Twhere
C: FromArrays<T>,
Source§fn arrays_into(self) -> C
fn arrays_into(self) -> C
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<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
impl<WpParam, T, U> Cam16IntoUnclamped<WpParam, T> for Uwhere
T: FromCam16Unclamped<WpParam, U>,
Source§type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
type Scalar = <T as FromCam16Unclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn cam16_into_unclamped(
self,
parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>,
) -> T
fn cam16_into_unclamped( self, parameters: BakedParameters<WpParam, <U as Cam16IntoUnclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
impl<T, C> ComponentsFrom<C> for Twhere
C: IntoComponents<T>,
Source§fn components_from(colors: C) -> T
fn components_from(colors: C) -> T
Source§impl<T> FromAngle<T> for T
impl<T> FromAngle<T> for T
Source§fn from_angle(angle: T) -> T
fn from_angle(angle: T) -> T
angle.Source§impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
impl<T, U> FromStimulus<U> for Twhere
U: IntoStimulus<T>,
Source§fn from_stimulus(other: U) -> T
fn from_stimulus(other: U) -> T
other into Self, while performing the appropriate scaling,
rounding and clamping.Source§impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
impl<T, U> IntoAngle<U> for Twhere
U: FromAngle<T>,
Source§fn into_angle(self) -> U
fn into_angle(self) -> U
T.Source§impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
impl<WpParam, T, U> IntoCam16Unclamped<WpParam, T> for Uwhere
T: Cam16FromUnclamped<WpParam, U>,
Source§type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
type Scalar = <T as Cam16FromUnclamped<WpParam, U>>::Scalar
parameters when converting.Source§fn into_cam16_unclamped(
self,
parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>,
) -> T
fn into_cam16_unclamped( self, parameters: BakedParameters<WpParam, <U as IntoCam16Unclamped<WpParam, T>>::Scalar>, ) -> T
self into C, using the provided parameters.Source§impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
impl<T, U> IntoColor<U> for Twhere
U: FromColor<T>,
Source§fn into_color(self) -> U
fn into_color(self) -> U
Source§impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
impl<T, U> IntoColorUnclamped<U> for Twhere
U: FromColorUnclamped<T>,
Source§fn into_color_unclamped(self) -> U
fn into_color_unclamped(self) -> U
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 moreSource§impl<El, T, Marker> IntoElementMaybeSignal<T, Marker> for Elwhere
El: IntoElementMaybeSignalType<T, Marker>,
impl<El, T, Marker> IntoElementMaybeSignal<T, Marker> for Elwhere
El: IntoElementMaybeSignalType<T, Marker>,
fn into_element_maybe_signal(self) -> ElementMaybeSignal<T>
Source§impl<T, Js> IntoElementMaybeSignalType<T, Element> for Js
impl<T, Js> IntoElementMaybeSignalType<T, Element> for Js
fn into_element_maybe_signal_type(self) -> ElementMaybeSignalType<T>
Source§impl<El, T, Marker> IntoElementsMaybeSignal<T, Marker> for Elwhere
El: IntoElementsMaybeSignalType<T, Marker>,
impl<El, T, Marker> IntoElementsMaybeSignal<T, Marker> for Elwhere
El: IntoElementsMaybeSignalType<T, Marker>,
fn into_elements_maybe_signal(self) -> ElementsMaybeSignal<T>
Source§impl<T, Js> IntoElementsMaybeSignalType<T, Element> for Js
impl<T, Js> IntoElementsMaybeSignalType<T, Element> for Js
fn into_elements_maybe_signal_type(self) -> ElementsMaybeSignalType<T>
Source§impl<T> IntoStimulus<T> for T
impl<T> IntoStimulus<T> for T
Source§fn into_stimulus(self) -> T
fn into_stimulus(self) -> T
self into T, while performing the appropriate scaling,
rounding and clamping.Source§impl<T> SerializableKey for T
impl<T> SerializableKey for T
Source§impl<T> StorageAccess<T> for T
impl<T> StorageAccess<T> for T
Source§fn as_borrowed(&self) -> &T
fn as_borrowed(&self) -> &T
Source§fn into_taken(self) -> T
fn into_taken(self) -> T
Source§impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
impl<T, C> TryComponentsInto<C> for Twhere
C: TryFromComponents<T>,
Source§type Error = <C as TryFromComponents<T>>::Error
type Error = <C as TryFromComponents<T>>::Error
try_into_colors fails to cast.Source§fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
fn try_components_into(self) -> Result<C, <T as TryComponentsInto<C>>::Error>
Source§impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
impl<T, U> TryIntoColor<U> for Twhere
U: TryFromColor<T>,
Source§fn try_into_color(self) -> Result<U, OutOfBounds<U>>
fn try_into_color(self) -> Result<U, OutOfBounds<U>>
OutOfBounds error is returned which contains
the unclamped color. Read more