pub struct SankeyChart<T: 'static> { /* private fields */ }Expand description
A Sankey diagram, layout modeled after d3-sankey.
Links reference nodes by their index in the node list; map string ids to indices before constructing.
Implementations§
Source§impl<T> SankeyChart<T>
impl<T> SankeyChart<T>
Sourcepub fn new<I, L>(nodes: I, links: L) -> Self
pub fn new<I, L>(nodes: I, links: L) -> Self
Create a chart from nodes and links; links reference nodes by their
index in nodes (map string ids to indices before constructing).
Sourcepub fn id(self, id: impl Into<ElementId>) -> Self
pub fn id(self, id: impl Into<ElementId>) -> Self
Name this chart’s ElementId, replacing the default taken from the
construction site.
Pass one where a single construction site renders several of these charts as siblings: they share the default id, and with it one hover state and one path cache. The id must be unique among those siblings.
Sourcepub fn interactive(self, interactive: bool) -> Self
pub fn interactive(self, interactive: bool) -> Self
Turn this chart’s interactive layer on or off. On by default.
The layer is the hitbox under the cursor and what it drives: the hovered node’s links stand out from the rest, and a tooltip shows its label and throughput. Turn it off for a chart that only decorates, or one an element above it wants the cursor for: without a hitbox it neither answers the mouse nor takes the hover from what sits over it. A chart that is off also drops its path cache, which is keyed on the same id.
Sourcepub fn node_width(self, node_width: f32) -> Self
pub fn node_width(self, node_width: f32) -> Self
Set the node rectangle width. Defaults to 10.
Sourcepub fn node_padding(self, node_padding: f32) -> Self
pub fn node_padding(self, node_padding: f32) -> Self
Set the vertical gap between nodes in a column. Defaults to 16.
Sourcepub fn node_align(self, align: SankeyAlign) -> Self
pub fn node_align(self, align: SankeyAlign) -> Self
Set the node alignment. Defaults to SankeyAlign::Justify.
Sourcepub fn iterations(self, iterations: usize) -> Self
pub fn iterations(self, iterations: usize) -> Self
Set the number of relaxation passes. Defaults to 6.
Sourcepub fn value_scale(self, value_scale: SankeyValueScale) -> Self
pub fn value_scale(self, value_scale: SankeyValueScale) -> Self
Set how flow values map to node heights.
Defaults to SankeyValueScale::Linear. Use SankeyValueScale::Sqrt
to keep a dominant flow from dwarfing the small ones without
pre-transforming the data; labels still receive the raw values.
Sourcepub fn node_corner_radius(self, radius: impl Into<Pixels>) -> Self
pub fn node_corner_radius(self, radius: impl Into<Pixels>) -> Self
Set the corner radius of the node rectangles. Defaults to 0.
Sourcepub fn node_color<H>(self, color: impl Fn(&T) -> H + 'static) -> Self
pub fn node_color<H>(self, color: impl Fn(&T) -> H + 'static) -> Self
Set the color of each node.
Defaults to cycling the theme chart palette by node index.
Sourcepub fn node_label(self, label: impl Fn(&T) -> SharedString + 'static) -> Self
pub fn node_label(self, label: impl Fn(&T) -> SharedString + 'static) -> Self
Set the name label of each node, drawn in muted foreground. No name label is drawn unless set.
Sourcepub fn value_label(
self,
label: impl Fn(&T, f64) -> SharedString + 'static,
) -> Self
pub fn value_label( self, label: impl Fn(&T, f64) -> SharedString + 'static, ) -> Self
Set the value label of each node, drawn above the name label. No value label is drawn unless set.
The closure receives the datum and the node’s raw computed throughput (max of incoming and outgoing flow, in unscaled units).
Sourcepub fn labels(
self,
labels: impl Fn(&T, f64) -> Vec<SankeyLabel> + 'static,
) -> Self
pub fn labels( self, labels: impl Fn(&T, f64) -> Vec<SankeyLabel> + 'static, ) -> Self
Set fully custom node labels, one SankeyLabel per line, top to
bottom. Takes precedence over node_label/value_label when set;
unset by default.
The closure receives the datum and the node’s raw computed throughput (max of incoming and outgoing flow, in unscaled units).
Sourcepub fn tooltip_name(self, name: impl Fn(&T) -> SharedString + 'static) -> Self
pub fn tooltip_name(self, name: impl Fn(&T) -> SharedString + 'static) -> Self
Name the node under the cursor in the hover tooltip’s row, beside its throughput. Unset, the row carries no name at all.
A sankey shows one number per node, so the node’s own name is what the
row wants; without it the row reads as a swatch and a number with a gap
between them. The alternative was to title the tooltip from
node_label, but that also draws the name beside the node — and a chart
drawing its text through labels sets neither.
Sourcepub fn tooltip_value(
self,
value: impl Fn(&T, f64) -> SharedString + 'static,
) -> Self
pub fn tooltip_value( self, value: impl Fn(&T, f64) -> SharedString + 'static, ) -> Self
Set the text of the hover tooltip’s row, the node’s throughput.
value_label supplies it when this is unset, and the raw number when
neither is set — which is what a chart drawing its text through labels
gets, however carefully it formats the value it draws.
Sourcepub fn link_opacity(self, opacity: f32) -> Self
pub fn link_opacity(self, opacity: f32) -> Self
Set the opacity of the link ribbons. Defaults to 0.3.
Sourcepub fn min_link_width(self, width: f32) -> Self
pub fn min_link_width(self, width: f32) -> Self
Set the minimum ribbon thickness, so tiny flows stay visible. Defaults to 1.
Trait Implementations§
Source§impl<T: 'static> IntoElement for SankeyChart<T>
impl<T: 'static> IntoElement for SankeyChart<T>
Source§type Element = PlotElement<SankeyChart<T>>
type Element = PlotElement<SankeyChart<T>>
Source§fn into_element(self) -> Self::Element
fn into_element(self) -> Self::Element
Element.Source§fn into_any_element(self) -> AnyElement
fn into_any_element(self) -> AnyElement
AnyElement.Source§impl<T> Plot for SankeyChart<T>
impl<T> Plot for SankeyChart<T>
Source§fn prepaint(
&mut self,
bounds: Bounds<Pixels>,
window: &mut Window,
cx: &mut App,
) -> Vec<AnyElement>
fn prepaint( &mut self, bounds: Bounds<Pixels>, window: &mut Window, cx: &mut App, ) -> Vec<AnyElement>
Resolve the placement for the frame, reusing the last one while nothing
that shapes it has changed. Measuring the labels needs the window, which
tooltip_state does not have, so this runs here rather than in paint.
fn paint(&mut self, bounds: Bounds<Pixels>, window: &mut Window, cx: &mut App)
Source§fn id(&self) -> Option<ElementId>
fn id(&self) -> Option<ElementId>
Source§fn tooltip_state(
&self,
position: Point<Pixels>,
_bounds: Bounds<Pixels>,
_cx: &App,
) -> Option<TooltipState>
fn tooltip_state( &self, position: Point<Pixels>, _bounds: Bounds<Pixels>, _cx: &App, ) -> Option<TooltipState>
Source§fn tooltip(
&self,
state: &TooltipState,
cursor: Point<Pixels>,
bounds: Bounds<Pixels>,
_window: &mut Window,
cx: &mut App,
) -> Option<AnyElement>
fn tooltip( &self, state: &TooltipState, cursor: Point<Pixels>, bounds: Bounds<Pixels>, _window: &mut Window, cx: &mut App, ) -> Option<AnyElement>
TooltipState. Read moreAuto Trait Implementations§
impl<T> !RefUnwindSafe for SankeyChart<T>
impl<T> !Send for SankeyChart<T>
impl<T> !Sync for SankeyChart<T>
impl<T> !UnwindSafe for SankeyChart<T>
impl<T> Freeze for SankeyChart<T>
impl<T> Unpin for SankeyChart<T>
impl<T> UnsafeUnpin for SankeyChart<T>where
Vec<T>: UnsafeUnpin,
Option<Rc<dyn Fn(&T) -> Hsla>>: UnsafeUnpin,
Option<Rc<dyn Fn(&T) -> SharedString>>: UnsafeUnpin,
Option<Rc<dyn Fn(&T, f64) -> SharedString>>: UnsafeUnpin,
Option<Rc<dyn Fn(&T, f64) -> Vec<SankeyLabel>>>: UnsafeUnpin,
Blanket Implementations§
Source§impl<E> AnimationExt for Ewhere
E: IntoElement + 'static,
impl<E> AnimationExt for Ewhere
E: IntoElement + 'static,
Source§fn with_animation(
self,
id: impl Into<ElementId>,
animation: Animation,
animator: impl Fn(Self, f32) -> Self + 'static,
) -> AnimationElement<Self>where
Self: Sized,
fn with_animation(
self,
id: impl Into<ElementId>,
animation: Animation,
animator: impl Fn(Self, f32) -> Self + 'static,
) -> AnimationElement<Self>where
Self: Sized,
Source§fn with_animations(
self,
id: impl Into<ElementId>,
animations: Vec<Animation>,
animator: impl Fn(Self, usize, f32) -> Self + 'static,
) -> AnimationElement<Self>where
Self: Sized,
fn with_animations(
self,
id: impl Into<ElementId>,
animations: Vec<Animation>,
animator: impl Fn(Self, usize, f32) -> Self + 'static,
) -> AnimationElement<Self>where
Self: Sized,
Source§fn with_spring<T>(
self,
id: impl Into<ElementId>,
animation: SpringAnimation<T>,
animator: impl FnOnce(Self, <T as SpringTarget>::Output) -> Self + 'static,
) -> SpringAnimationElement<Self>
fn with_spring<T>( self, id: impl Into<ElementId>, animation: SpringAnimation<T>, animator: impl FnOnce(Self, <T as SpringTarget>::Output) -> Self + 'static, ) -> SpringAnimationElement<Self>
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> FluentBuilder for Twhere
T: IntoElement,
impl<T> FluentBuilder for Twhere
T: IntoElement,
Source§fn map<U>(self, f: impl FnOnce(Self) -> U) -> Uwhere
Self: Sized,
fn map<U>(self, f: impl FnOnce(Self) -> U) -> Uwhere
Self: Sized,
Source§fn when(self, condition: bool, then: impl FnOnce(Self) -> Self) -> Selfwhere
Self: Sized,
fn when(self, condition: bool, then: impl FnOnce(Self) -> Self) -> Selfwhere
Self: Sized,
Source§fn when_else(
self,
condition: bool,
then: impl FnOnce(Self) -> Self,
else_fn: impl FnOnce(Self) -> Self,
) -> Selfwhere
Self: Sized,
fn when_else(
self,
condition: bool,
then: impl FnOnce(Self) -> Self,
else_fn: impl FnOnce(Self) -> Self,
) -> Selfwhere
Self: Sized,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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