pub mod dodge;
pub mod dodge2;
pub mod fill;
pub mod identity;
pub mod jitter;
pub mod jitterdodge;
pub mod nudge;
pub mod stack;
use crate::data::DataFrame;
#[derive(Clone, Debug)]
pub struct PositionParams {
pub width: f64,
pub height: f64,
pub group_order: Option<Vec<String>>,
}
impl Default for PositionParams {
fn default() -> Self {
PositionParams {
width: 0.9,
height: 0.0,
group_order: None,
}
}
}
pub trait Position: Send + Sync {
fn compute(&self, data: &mut DataFrame, params: &PositionParams);
fn name(&self) -> &str;
fn per_panel(&self) -> bool {
false
}
fn group_order(&self, _data: &DataFrame) -> Option<Vec<String>> {
None
}
fn validate(&self, _warnings: &mut Vec<String>) {}
}
pub const RAW_Y_COL: &str = ".y_raw";
pub(crate) fn preserve_raw_y(data: &mut DataFrame, y: &[crate::data::Value]) {
if !data.has_column(RAW_Y_COL) {
data.add_column(RAW_Y_COL.to_string(), y.to_vec());
}
}
pub const DODGE_OFFSET_COL: &str = ".x_dodge_offset";
pub const DODGE_N_COL: &str = ".x_dodge_n";