Skip to main content

ggplot_rs/position/
nudge.rs

1use crate::data::{DataFrame, Value};
2
3use super::{Position, PositionParams};
4
5/// Nudge position — adds a fixed offset to x and/or y.
6pub struct PositionNudge {
7    pub x: f64,
8    pub y: f64,
9}
10
11impl PositionNudge {
12    pub fn new(x: f64, y: f64) -> Self {
13        PositionNudge { x, y }
14    }
15}
16
17impl Default for PositionNudge {
18    fn default() -> Self {
19        PositionNudge { x: 0.0, y: 0.0 }
20    }
21}
22
23impl Position for PositionNudge {
24    fn compute(&self, data: &mut DataFrame, _params: &PositionParams) {
25        if self.x.abs() > f64::EPSILON {
26            if let Some(col) = data.column_mut("x") {
27                for v in col.iter_mut() {
28                    if let Some(f) = v.as_f64() {
29                        *v = Value::Float(f + self.x);
30                    }
31                }
32            }
33        }
34
35        if self.y.abs() > f64::EPSILON {
36            if let Some(col) = data.column_mut("y") {
37                for v in col.iter_mut() {
38                    if let Some(f) = v.as_f64() {
39                        *v = Value::Float(f + self.y);
40                    }
41                }
42            }
43        }
44    }
45
46    fn name(&self) -> &str {
47        "nudge"
48    }
49}