MCPcopy Create free account
hub / github.com/alceal/plotlars / render_bar_vertical

Function render_bar_vertical

crates/plotlars-plotters/src/render/bar.rs:33–234  ·  view source on GitHub ↗
(
    root: &DrawingArea<DB, plotters::coord::Shift>,
    layout: &LayoutIR,
    traces: &[TraceIR],
    unsupported: &mut Vec<String>,
)

Source from the content-addressed store, hash-verified

31}
32
33pub(super) fn render_bar_vertical<DB: DrawingBackend>(
34 root: &DrawingArea<DB, plotters::coord::Shift>,
35 layout: &LayoutIR,
36 traces: &[TraceIR],
37 unsupported: &mut Vec<String>,
38) {
39 let config = extract_layout_config(layout, unsupported);
40 let bar_mode = resolve_bar_mode(layout);
41 let categories = collect_bar_categories(traces);
42 let n_cats = categories.len();
43 let n_groups = count_bar_groups(traces);
44 let (_, max_val) = compute_bar_ranges(traces, is_stacked(bar_mode));
45
46 let x_range = -0.5..(n_cats as f64 - 0.5);
47 let y_hi = config
48 .y_range
49 .map(|(_, hi)| hi)
50 .unwrap_or((max_val * 1.1).max(1.0));
51 let y_lo = config.y_range.map(|(lo, _)| lo).unwrap_or(0.0);
52 let y_range = y_lo..y_hi;
53
54 let (w, h) = resolve_dimensions(layout);
55 draw_plot_title(root, &config, w, h);
56
57 let mut builder = ChartBuilder::on(root);
58 builder
59 .margin_top(15 + title_top_margin(&config))
60 .margin_bottom(15)
61 .margin_left(15)
62 .margin_right(15);
63 configure_label_areas(&mut builder, &config, 40, 50);
64
65 let mut chart = builder.build_cartesian_2d(x_range, y_range).unwrap();
66
67 let categories_clone = categories.clone();
68 let x_formatter = move |v: &f64| {
69 let idx = v.round() as usize;
70 categories_clone.get(idx).cloned().unwrap_or_default()
71 };
72 {
73 let mut mesh = chart.configure_mesh();
74 mesh.x_labels(n_cats).x_label_formatter(&x_formatter);
75
76 let xvc = axis_value_color(config.x_axis.as_ref());
77 let yvc = axis_value_color(config.y_axis.as_ref());
78 apply_mesh_axis_config(&mut mesh, &config, &xvc, &yvc);
79
80 let y_fmt;
81 let y_thousands = config
82 .y_axis
83 .as_ref()
84 .and_then(|a| a.value_thousands)
85 .unwrap_or(false);
86 if y_thousands {
87 y_fmt = |v: &f64| format_thousands(*v);
88 mesh.y_label_formatter(&y_fmt);
89 }
90

Callers 1

render_to_backendFunction · 0.85

Calls 15

extract_layout_configFunction · 0.85
resolve_bar_modeFunction · 0.85
collect_bar_categoriesFunction · 0.85
count_bar_groupsFunction · 0.85
compute_bar_rangesFunction · 0.85
is_stackedFunction · 0.85
resolve_dimensionsFunction · 0.85
draw_plot_titleFunction · 0.85
title_top_marginFunction · 0.85
configure_label_areasFunction · 0.85
axis_value_colorFunction · 0.85
apply_mesh_axis_configFunction · 0.85

Tested by

no test coverage detected