scatterplot/
scatterplot.rs1use plotlars::{Axis, Legend, Plot, Rgb, ScatterPlot, Shape, Text, TickDirection};
2use polars::prelude::*;
3
4fn main() {
5 let dataset = LazyCsvReader::new(PlPath::new("data/penguins.csv"))
6 .finish()
7 .unwrap()
8 .select([
9 col("species"),
10 col("sex").alias("gender"),
11 col("flipper_length_mm").cast(DataType::Int16),
12 col("body_mass_g").cast(DataType::Int16),
13 ])
14 .collect()
15 .unwrap();
16
17 let axis = Axis::new()
18 .show_line(true)
19 .tick_direction(TickDirection::OutSide)
20 .value_thousands(true);
21
22 ScatterPlot::builder()
23 .data(&dataset)
24 .x("body_mass_g")
25 .y("flipper_length_mm")
26 .group("species")
27 .sort_groups_by(|a, b| {
28 if a.len() == b.len() {
29 a.cmp(b)
30 } else {
31 a.len().cmp(&b.len())
32 }
33 })
34 .opacity(0.5)
35 .size(12)
36 .colors(vec![Rgb(178, 34, 34), Rgb(65, 105, 225), Rgb(255, 140, 0)])
37 .shapes(vec![Shape::Circle, Shape::Square, Shape::Diamond])
38 .plot_title(Text::from("Scatter Plot").font("Arial").size(20).x(0.065))
39 .x_title("body mass (g)")
40 .y_title("flipper length (mm)")
41 .legend_title("species")
42 .x_axis(&axis.clone().value_range(vec![2500.0, 6500.0]))
43 .y_axis(&axis.clone().value_range(vec![170.0, 240.0]))
44 .legend(&Legend::new().x(0.85).y(0.15))
45 .build()
46 .plot();
47}