Scatter Plots
The following imports have been used to produce the plots below:
#![allow(unused)] fn main() { use itertools_num::linspace; use plotly::common::{ ColorScale, ColorScalePalette, DashType, Fill, Font, Line, LineShape, Marker, Mode, Title, }; use plotly::layout::{Axis, BarMode, Layout, Legend, TicksDirection}; use plotly::{Bar, color::{NamedColor, Rgb, Rgba}, Plot, Scatter}; use rand_distr::{Distribution, Normal, Uniform}; }
The to_inline_html
method is used to produce the html plot displayed in this page.
Simple Scatter Plot
#![allow(unused)] fn main() { fn simple_scatter_plot(show: bool) { let n: usize = 100; let t: Vec<f64> = linspace(0., 10., n).collect(); let y = t.iter().map(|x| x.sin()).collect(); let trace = Scatter::new(t, y).mode(Mode::Markers); let mut plot = Plot::new(); plot.add_trace(trace); if show { plot.show(); } println!("{}", plot.to_inline_html(Some("simple_scatter_plot"))); } }
Line and Scatter Plots
#![allow(unused)] fn main() { fn line_and_scatter_plots(show: bool) { let n: usize = 100; let mut rng = rand::thread_rng(); let random_x: Vec<f64> = linspace(0., 1., n).collect(); let random_y0: Vec<f64> = Normal::new(5., 1.) .unwrap() .sample_iter(rng) .take(n) .collect(); let random_y1: Vec<f64> = Normal::new(0., 1.) .unwrap() .sample_iter(rng) .take(n) .collect(); let random_y2: Vec<f64> = Normal::new(-5., 1.) .unwrap() .sample_iter(rng) .take(n) .collect(); let trace1 = Scatter::new(random_x.clone(), random_y0) .mode(Mode::Markers) .name("markers"); let trace2 = Scatter::new(random_x.clone(), random_y1) .mode(Mode::LinesMarkers) .name("linex+markers"); let trace3 = Scatter::new(random_x, random_y2) .mode(Mode::Lines) .name("lines"); let mut plot = Plot::new(); plot.add_trace(trace1); plot.add_trace(trace2); plot.add_trace(trace3); if show { plot.show(); } println!("{}", plot.to_inline_html(Some("line_and_scatter_plots"))); } }
Bubble Scatter Plots
#![allow(unused)] fn main() { fn bubble_scatter_plots(show: bool) { let trace1 = Scatter::new(vec![1, 2, 3, 4], vec![10, 11, 12, 13]) .mode(Mode::Markers) .marker( Marker::new() .size_array(vec![40, 60, 80, 100]) .color_array(vec![ NamedColor::Red, NamedColor::Blue, NamedColor::Cyan, NamedColor::OrangeRed, ]), ); let mut plot = Plot::new(); plot.add_trace(trace1); if show { plot.show(); } println!("{}", plot.to_inline_html(Some("bubble_scatter_plots"))); } }
Data Labels Hover
#![allow(unused)] fn main() { fn data_labels_hover(show: bool) { let trace1 = Scatter::new(vec![1, 2, 3, 4, 5], vec![1, 6, 3, 6, 1]) .mode(Mode::Markers) .name("Team A") .marker(Marker::new().size(12)); let trace2 = Scatter::new(vec![1.5, 2.5, 3.5, 4.5, 5.5], vec![4, 1, 7, 1, 4]) .mode(Mode::Markers) .name("Team B") .marker(Marker::new().size(12)); let mut plot = Plot::new(); plot.add_trace(trace1); plot.add_trace(trace2); let layout = Layout::new() .title(Title::with_text("Data Labels Hover")) .x_axis(Axis::new().title(Title::with_text("x")).range(vec![0.75, 5.25])) .y_axis(Axis::new().title(Title::with_text("y")).range(vec![0., 8.])); plot.set_layout(layout); if show { plot.show(); } println!("{}", plot.to_inline_html(Some("data_labels_hover"))); } }
Data Labels on the Plot
#![allow(unused)] fn main() { fn data_labels_on_the_plot(show: bool) { let trace1 = Scatter::new(vec![1, 2, 3, 4, 5], vec![1, 6, 3, 6, 1]) .mode(Mode::Markers) .name("Team A") .marker(Marker::new().size(12)) .text_array(vec!["A-1", "A-2", "A-3", "A-4", "A-5"]); let trace2 = Scatter::new(vec![1.5, 2.5, 3.5, 4.5, 5.5], vec![4, 1, 7, 1, 4]) .mode(Mode::Markers) .name("Team B") .text_array(vec!["B-a", "B-b", "B-c", "B-d", "B-e"]) .marker(Marker::new().size(12)); let mut plot = Plot::new(); plot.add_trace(trace1); plot.add_trace(trace2); let layout = Layout::new() .title(Title::with_text("Data Labels on the Plot")) .x_axis(Axis::new().range(vec![0.75, 5.25])) .y_axis(Axis::new().range(vec![0., 8.])); plot.set_layout(layout); if show { plot.show(); } println!("{}", plot.to_inline_html(Some("data_labels_on_the_plot"))); } }
Colored and Styled Scatter Plot
#![allow(unused)] fn main() { fn colored_and_styled_scatter_plot(show: bool) { let trace1 = Scatter::new(vec![52698, 43117], vec![53, 31]) .mode(Mode::Markers) .name("North America") .text_array(vec!["United States", "Canada"]) .marker( Marker::new() .color(Rgb::new(164, 194, 244)) .size(12) .line(Line::new().color(NamedColor::White).width(0.5)), ); let trace2 = Scatter::new( vec![ 39317, 37236, 35650, 30066, 29570, 27159, 23557, 21046, 18007, ], vec![33, 20, 13, 19, 27, 19, 49, 44, 38], ) .mode(Mode::Markers) .name("Europe") .text_array(vec![ "Germany", "Britain", "France", "Spain", "Italy", "Czech Rep.", "Greece", "Poland", ]) .marker(Marker::new().color(Rgb::new(255, 217, 102)).size(12)); let trace3 = Scatter::new( vec![42952, 37037, 33106, 17478, 9813, 5253, 4692, 3899], vec![23, 42, 54, 89, 14, 99, 93, 70], ) .mode(Mode::Markers) .name("Asia/Pacific") .text_array(vec![ "Australia", "Japan", "South Korea", "Malaysia", "China", "Indonesia", "Philippines", "India", ]) .marker(Marker::new().color(Rgb::new(234, 153, 153)).size(12)); let trace4 = Scatter::new( vec![19097, 18601, 15595, 13546, 12026, 7434, 5419], vec![43, 47, 56, 80, 86, 93, 80], ) .mode(Mode::Markers) .name("Latin America") .text_array(vec![ "Chile", "Argentina", "Mexico", "Venezuela", "Venezuela", "El Salvador", "Bolivia", ]) .marker(Marker::new().color(Rgb::new(142, 124, 195)).size(12)); let layout = Layout::new() .title(Title::with_text("Quarter 1 Growth")) .x_axis( Axis::new() .title(Title::with_text("GDP per Capita")) .show_grid(false) .zero_line(false), ) .y_axis(Axis::new().title(Title::with_text("Percent")).show_line(false)); let mut plot = Plot::new(); plot.add_trace(trace1); plot.add_trace(trace2); plot.add_trace(trace3); plot.add_trace(trace4); plot.set_layout(layout); if show { plot.show(); } println!( "{}", plot.to_inline_html(Some("colored_and_styled_scatter_plot")) ); } }
Large Data Sets
#![allow(unused)] fn main() { fn large_data_sets(show: bool) { let n: usize = 100_000; let mut rng = rand::thread_rng(); let r: Vec<f64> = Uniform::new(0., 1.).sample_iter(rng).take(n).collect(); let theta: Vec<f64> = Normal::new(0., 2. * std::f64::consts::PI) .unwrap() .sample_iter(rng) .take(n) .collect(); let colors: Vec<f64> = Normal::new(0., 1.) .unwrap() .sample_iter(rng) .take(n) .collect(); let x: Vec<f64> = r .iter() .zip(theta.iter()) .map(|args| args.0 * args.1.cos()) .collect(); let y: Vec<f64> = r .iter() .zip(theta.iter()) .map(|args| args.0 * args.1.sin()) .collect(); let trace = Scatter::new(x, y) .open_gl_mode(true) .mode(Mode::Markers) .marker( Marker::new() .color_scale(ColorScale::Palette(ColorScalePalette::Viridis)) .color_array(colors) .line(Line::new().width(1.)), ); let mut plot = Plot::new(); plot.add_trace(trace); if show { plot.show(); } // Note the following will not show the full output of the `to_inline_html` method. println!("{}", plot.to_inline_html(Some("large_data_sets"))); } }