use crate::colormap::ColorMaps;
use crate::options::{AxisOptions, BasePlotOptions, PlotOptions};
use crate::plots::PlotType;
use derive_builder::Builder;
#[derive(Builder, Clone, Debug)]
#[builder(setter(into, strip_option), default)]
pub struct DensityPlotOptions {
#[builder(default)]
pub base: BasePlotOptions,
#[builder(default)]
pub x_axis: AxisOptions,
#[builder(default)]
pub y_axis: AxisOptions,
#[builder(default = "ColorMaps::Viridis")]
pub colormap: ColorMaps,
#[builder(default)]
pub plot_type: PlotType,
#[builder(default = "1.0")]
pub point_size: f32,
#[builder(default = "1.0")]
pub contour_line_thickness: f32,
#[builder(default = "5")]
pub contour_level_count: u32,
#[builder(default = "1.0")]
pub contour_smoothing: f64,
#[builder(default = "false")]
pub draw_outliers: bool,
#[builder(default)]
pub gate_colors: Vec<(u8, u8, u8)>,
#[builder(default)]
pub z_range: Option<(f32, f32)>,
}
impl Default for DensityPlotOptions {
fn default() -> Self {
Self {
base: BasePlotOptions::default(),
x_axis: AxisOptions::default(),
y_axis: AxisOptions::default(),
colormap: ColorMaps::Viridis,
plot_type: PlotType::Density,
point_size: 1.0,
contour_line_thickness: 1.0,
contour_level_count: 5,
contour_smoothing: 1.0,
draw_outliers: false,
gate_colors: Vec::new(),
z_range: None,
}
}
}
pub fn default_gate_colors() -> Vec<(u8, u8, u8)> {
vec![
(34, 139, 34), (255, 165, 0), (31, 119, 180), (214, 39, 40), (148, 103, 189), (140, 86, 75), (227, 119, 194), (127, 127, 127), ]
}
impl PlotOptions for DensityPlotOptions {
fn base(&self) -> &BasePlotOptions {
&self.base
}
}
impl DensityPlotOptions {
pub fn new() -> DensityPlotOptionsBuilder {
DensityPlotOptionsBuilder::default()
}
}