Scatter Plots
The following imports have been used to produce the plots below:
#![allow(unused)] fn main() { use ndarray::Array; 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) -> Plot { let n: usize = 100; let t: Vec<f64> = Array::linspace(0., 10., n).into_raw_vec_and_offset().0; let y: Vec<f64> = 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(); } plot } }
Line and Scatter Plots
#![allow(unused)] fn main() { fn line_and_scatter_plots(show: bool) -> Plot { let n: usize = 100; let mut rng = rand::thread_rng(); let random_x: Vec<f64> = Array::linspace(0., 1., n).into_raw_vec_and_offset().0; let random_y0: Vec<f64> = Normal::new(5., 1.) .unwrap() .sample_iter(&mut rng) .take(n) .collect(); let random_y1: Vec<f64> = Normal::new(0., 1.) .unwrap() .sample_iter(&mut rng) .take(n) .collect(); let random_y2: Vec<f64> = Normal::new(-5., 1.) .unwrap() .sample_iter(&mut 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(); } plot } }
Bubble Scatter Plots
#![allow(unused)] fn main() { fn bubble_scatter_plots(show: bool) -> Plot { 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(); } plot } }
Data Labels Hover
#![allow(unused)] fn main() { fn data_labels_hover(show: bool) -> Plot { 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("Data Labels Hover") .x_axis(Axis::new().title("x").range(vec![0.75, 5.25])) .y_axis(Axis::new().title("y").range(vec![0., 8.])); plot.set_layout(layout); if show { plot.show(); } plot } }
Data Labels on the Plot
#![allow(unused)] fn main() { fn data_labels_on_the_plot(show: bool) -> Plot { 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("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(); } plot } }
Colored and Styled Scatter Plot
#![allow(unused)] fn main() { fn colored_and_styled_scatter_plot(show: bool) -> Plot { 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("Quarter 1 Growth") .x_axis( Axis::new() .title("GDP per Capita") .show_grid(false) .zero_line(false), ) .y_axis(Axis::new().title("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(); } plot } }
Large Data Sets
#![allow(unused)] fn main() { fn large_data_sets(show: bool) -> Plot { let n: usize = 100_000; let mut rng = rand::thread_rng(); let r: Vec<f64> = Uniform::new(0., 1.).sample_iter(&mut rng).take(n).collect(); let theta: Vec<f64> = Normal::new(0., 2. * std::f64::consts::PI) .unwrap() .sample_iter(&mut 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) .web_gl_mode(true) .mode(Mode::Markers) .marker( Marker::new() .color_scale(ColorScale::Palette(ColorScalePalette::Viridis)) .line(Line::new().width(1.)), ); let mut plot = Plot::new(); plot.add_trace(trace); if show { plot.show(); } plot } }