Skip to content

Commit

Permalink
added options to chart 2d to disable the background mesh
Browse files Browse the repository at this point in the history
resolves #8
  • Loading branch information
cptpiepmatz committed Jan 31, 2025
1 parent fd118f0 commit 7051262
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 1 deletion.
35 changes: 35 additions & 0 deletions crates/nu_plugin_plotters/src/commands/chart_2d.rs
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,17 @@ impl Command for Chart2d {
)
.named("x-range", SyntaxShape::Range, "Set the x range.", Some('x'))
.named("y-range", SyntaxShape::Range, "Set the y range.", Some('y'))
.switch("disable-mesh", "Disable the background mesh grid.", None)
.switch(
"disable-x-mesh",
"Disable the background mesh for the x axis.",
None,
)
.switch(
"disable-y-mesh",
"Disable the background mesh for the y axis.",
None,
)
.input_output_type(Type::Nothing, value::Chart2d::ty())
.input_output_type(value::Series2d::ty(), value::Chart2d::ty())
.input_output_type(Type::list(value::Series2d::ty()), value::Chart2d::ty())
Expand Down Expand Up @@ -104,6 +115,9 @@ impl Command for Chart2d {
let label_area = call.get_flag(engine_state, stack, "label-area")?;
let x_range = call.get_flag(engine_state, stack, "x-range")?;
let y_range = call.get_flag(engine_state, stack, "y-range")?;
let disable_mesh = call.get_flag(engine_state, stack, "disable-mesh")?;
let disable_x_mesh = call.get_flag(engine_state, stack, "disable-x-mesh")?;
let disable_y_mesh = call.get_flag(engine_state, stack, "disable-y-mesh")?;
Chart2d::run(self, input, extend, Chart2dOptions {
width,
height,
Expand All @@ -113,6 +127,9 @@ impl Command for Chart2d {
label_area,
x_range,
y_range,
disable_mesh,
disable_x_mesh,
disable_y_mesh,
})
.map(|v| PipelineData::Value(v, None))
}
Expand Down Expand Up @@ -170,6 +187,13 @@ impl SimplePluginCommand for Chart2d {
T::from_value(value)
}

fn extract_flag(value: Option<Value>) -> Result<Option<bool>, ShellError> {
Ok(Some(match value {
None => true,
Some(value) => bool::from_value(value)?,
}))
}

match name.item.as_str() {
"width" => options.width = extract_named("width", value, name.span)?,
"height" => options.height = extract_named("height", value, name.span)?,
Expand All @@ -179,6 +203,9 @@ impl SimplePluginCommand for Chart2d {
"label-area" => options.label_area = extract_named("label-area", value, name.span)?,
"x-range" => options.x_range = extract_named("x-range", value, name.span)?,
"y-range" => options.y_range = extract_named("y-range", value, name.span)?,
"disable-mesh" => options.disable_mesh = extract_flag(value)?,
"disable-x-mesh" => options.disable_x_mesh = extract_flag(value)?,
"disable-y-mesh" => options.disable_y_mesh = extract_flag(value)?,
_ => continue,
}
}
Expand All @@ -197,6 +224,9 @@ struct Chart2dOptions {
pub label_area: Option<Vec<u32>>,
pub x_range: Option<value::Range>,
pub y_range: Option<value::Range>,
pub disable_mesh: Option<bool>,
pub disable_x_mesh: Option<bool>,
pub disable_y_mesh: Option<bool>,
}

impl Chart2d {
Expand All @@ -214,6 +244,9 @@ impl Chart2d {
label_area,
x_range,
y_range,
disable_mesh,
disable_x_mesh,
disable_y_mesh,
}: Chart2dOptions,
) -> Result<Value, ShellError> {
let span = input.span();
Expand All @@ -239,6 +272,8 @@ impl Chart2d {
.unwrap_or(chart.label_area);
chart.x_range = x_range.or(chart.x_range);
chart.y_range = y_range.or(chart.y_range);
chart.x_mesh = !(disable_mesh.unwrap_or(false) || disable_x_mesh.unwrap_or(false));
chart.y_mesh = !(disable_mesh.unwrap_or(false) || disable_y_mesh.unwrap_or(false));

Ok(Value::custom(Box::new(chart), span))
}
Expand Down
10 changes: 9 additions & 1 deletion crates/nu_plugin_plotters/src/commands/draw/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,15 @@ fn draw<DB: DrawingBackend>(chart: value::Chart2d, drawing_area: DrawingArea<DB,

let mut chart_context = chart_builder.build_cartesian_2d(x_range, y_range).unwrap();

chart_context.configure_mesh().draw().unwrap();
let mut mesh = chart_context.configure_mesh();
if !chart.x_mesh {
mesh.disable_x_mesh();
};
if !chart.y_mesh {
mesh.disable_y_mesh();
};
mesh.draw().unwrap();

for series in chart.series {
match series {
value::Series2d::Line(series) => draw_line(&mut chart_context, series),
Expand Down
4 changes: 4 additions & 0 deletions crates/nu_plugin_plotters/src/value/chart_2d.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ pub struct Chart2d {
pub label_area: [u32; 4],
pub x_range: Option<Range>,
pub y_range: Option<Range>,
pub x_mesh: bool,
pub y_mesh: bool,
}

impl Default for Chart2d {
Expand All @@ -32,6 +34,8 @@ impl Default for Chart2d {
label_area: [0, 0, 35, 35],
x_range: None,
y_range: None,
x_mesh: true,
y_mesh: true,
}
}
}
Expand Down

0 comments on commit 7051262

Please sign in to comment.