Skip to main content

SankeyChart

Struct SankeyChart 

Source
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>

Source

pub fn new<I, L>(nodes: I, links: L) -> Self
where I: IntoIterator<Item = T>, L: IntoIterator<Item = SankeyLink>,

Create a chart from nodes and links; links reference nodes by their index in nodes (map string ids to indices before constructing).

Source

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.

Source

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.

Source

pub fn node_width(self, node_width: f32) -> Self

Set the node rectangle width. Defaults to 10.

Source

pub fn node_padding(self, node_padding: f32) -> Self

Set the vertical gap between nodes in a column. Defaults to 16.

Source

pub fn node_align(self, align: SankeyAlign) -> Self

Set the node alignment. Defaults to SankeyAlign::Justify.

Source

pub fn iterations(self, iterations: usize) -> Self

Set the number of relaxation passes. Defaults to 6.

Source

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.

Source

pub fn node_corner_radius(self, radius: impl Into<Pixels>) -> Self

Set the corner radius of the node rectangles. Defaults to 0.

Source

pub fn node_color<H>(self, color: impl Fn(&T) -> H + 'static) -> Self
where H: Into<Hsla> + 'static,

Set the color of each node.

Defaults to cycling the theme chart palette by node index.

Source

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.

Source

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).

Source

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).

Source

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.

Source

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.

Set the opacity of the link ribbons. Defaults to 0.3.

Set the minimum ribbon thickness, so tiny flows stay visible. Defaults to 1.

Source

pub fn label_gap(self, gap: f32) -> Self

Set the gap between a node and its labels. Defaults to 6.

Trait Implementations§

Source§

impl<T: 'static> IntoElement for SankeyChart<T>

Source§

type Element = PlotElement<SankeyChart<T>>

The specific type of element into which the implementing type is converted. Useful for converting other types into elements automatically, like Strings
Source§

fn into_element(self) -> Self::Element

Convert self into a type that implements Element.
Source§

fn into_any_element(self) -> AnyElement

Convert self into a dynamically-typed AnyElement.
Source§

impl<T> Plot for SankeyChart<T>

Source§

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.

Source§

fn paint(&mut self, bounds: Bounds<Pixels>, window: &mut Window, cx: &mut App)

Source§

fn id(&self) -> Option<ElementId>

A stable element id that enables interactive tooltip support for this plot. Read more
Source§

fn tooltip_state( &self, position: Point<Pixels>, _bounds: Bounds<Pixels>, _cx: &App, ) -> Option<TooltipState>

Map the cursor to the tooltip state to display. Read more
Source§

fn hover( &mut self, hover: Option<&PlotHover>, _window: &mut Window, _cx: &mut App, )

Receive the hovered datum this frame, before Plot::tooltip and Plot::paint run. Read more
Source§

fn tooltip( &self, state: &TooltipState, cursor: Point<Pixels>, bounds: Bounds<Pixels>, _window: &mut Window, cx: &mut App, ) -> Option<AnyElement>

Render the tooltip overlay for the active TooltipState. Read more

Auto 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>
where Vec<T>: Freeze, Option<Rc<dyn Fn(&T) -> Hsla>>: Freeze, Option<Rc<dyn Fn(&T) -> SharedString>>: Freeze, Option<Rc<dyn Fn(&T, f64) -> SharedString>>: Freeze, Option<Rc<dyn Fn(&T, f64) -> Vec<SankeyLabel>>>: Freeze,

§

impl<T> Unpin for SankeyChart<T>
where Vec<T>: Unpin, Option<Rc<dyn Fn(&T) -> Hsla>>: Unpin, Option<Rc<dyn Fn(&T) -> SharedString>>: Unpin, Option<Rc<dyn Fn(&T, f64) -> SharedString>>: Unpin, Option<Rc<dyn Fn(&T, f64) -> Vec<SankeyLabel>>>: Unpin,

§

impl<T> UnsafeUnpin for SankeyChart<T>

Blanket Implementations§

Source§

impl<E> AnimationExt for E
where 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,

Render this component or element with an animation
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,

Render this component or element with a chain of animations
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>
where Self: Sized, T: SpringTarget, <T as SpringTarget>::Output: 'static,

Renders this component or element at the value produced by a spring. Read more
Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> FluentBuilder for T
where T: IntoElement,

Source§

fn map<U>(self, f: impl FnOnce(Self) -> U) -> U
where Self: Sized,

Imperatively modify self with the given closure.
Source§

fn when(self, condition: bool, then: impl FnOnce(Self) -> Self) -> Self
where Self: Sized,

Conditionally modify self with the given closure.
Source§

fn when_else( self, condition: bool, then: impl FnOnce(Self) -> Self, else_fn: impl FnOnce(Self) -> Self, ) -> Self
where Self: Sized,

Conditionally modify self with the given closure.
Source§

fn when_some<T>( self, option: Option<T>, then: impl FnOnce(Self, T) -> Self, ) -> Self
where Self: Sized,

Conditionally unwrap and modify self with the given closure, if the given option is Some.
Source§

fn when_none<T>( self, option: &Option<T>, then: impl FnOnce(Self) -> Self, ) -> Self
where Self: Sized,

Conditionally unwrap and modify self with the given closure, if the given option is None.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more