diff --git a/charming/src/component/legend.rs b/charming/src/component/legend.rs index 5ab8788..3ef84d0 100644 --- a/charming/src/component/legend.rs +++ b/charming/src/component/legend.rs @@ -1,3 +1,5 @@ +use std::collections::HashMap; + use serde::Serialize; use crate::{ @@ -158,6 +160,9 @@ pub struct Legend { #[serde(skip_serializing_if = "Option::is_none")] formatter: Option, + #[serde(skip_serializing_if = "Option::is_none")] + selected: Option>, + #[serde(skip_serializing_if = "Option::is_none")] selected_mode: Option, @@ -202,6 +207,7 @@ impl Legend { text_style: None, symbol_rotate: None, formatter: None, + selected: None, selected_mode: None, border_color: None, inactive_color: None, @@ -314,6 +320,14 @@ impl Legend { self } + pub fn selected, I: IntoIterator>( + mut self, + selected: I, + ) -> Self { + self.selected = Some(selected.into_iter().map(|(k, v)| (k.into(), v)).collect()); + self + } + pub fn selected_mode>(mut self, selected_mode: S) -> Self { self.selected_mode = Some(selected_mode.into()); self diff --git a/gallery/src/line/stacked_line.rs b/gallery/src/line/stacked_line.rs index d60a6ae..5eb5068 100644 --- a/gallery/src/line/stacked_line.rs +++ b/gallery/src/line/stacked_line.rs @@ -9,13 +9,18 @@ pub fn chart() -> Chart { Chart::new() .title(Title::new().text("Stacked Line")) .tooltip(Tooltip::new().trigger(Trigger::Axis)) - .legend(Legend::new().data(vec![ - "Email", - "Union Ads", - "Video Ads", - "Direct", - "Search Engine", - ])) + .legend( + Legend::new() + .data(vec![ + "Email", + "Union Ads", + "Video Ads", + "Direct", + "Search Engine", + "Affiliate Marketing", + ]) + .selected([("Affiliate Marketing", false)]), + ) .grid( Grid::new() .left("3%") @@ -61,4 +66,10 @@ pub fn chart() -> Chart { .stack("Total") .data(vec![820, 932, 901, 934, 1290, 1330, 1320]), ) + .series( + Line::new() + .name("Affiliate Marketing") + .stack("Total") + .data(vec![180, 232, 210, 290, 250, 400, 370]), + ) }