ggplot_rs/position/
nudge.rs1use crate::data::{DataFrame, Value};
2
3use super::{Position, PositionParams};
4
5pub 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}