mirror of
https://github.com/emilk/egui.git
synced 2026-09-01 14:20:04 -04:00
egui_plot: customizable spacing of grid and axis label spacing (#3896)
This lets users specify the spacing of the grid lines and the axis labels, as well as when these start to fade out. New: * `AxisHints::new_x/new_y` (replaces `::default()`) * `AxisHints::label_spacing` * `Plot::grid_spacing`
This commit is contained in:
@@ -530,23 +530,27 @@ impl CustomAxesDemo {
|
||||
100.0 * y
|
||||
}
|
||||
|
||||
let x_fmt = |x, _digits, _range: &RangeInclusive<f64>| {
|
||||
if x < 0.0 * MINS_PER_DAY || x >= 5.0 * MINS_PER_DAY {
|
||||
let time_formatter = |mark: GridMark, _digits, _range: &RangeInclusive<f64>| {
|
||||
let minutes = mark.value;
|
||||
if minutes < 0.0 || 5.0 * MINS_PER_DAY <= minutes {
|
||||
// No labels outside value bounds
|
||||
String::new()
|
||||
} else if is_approx_integer(x / MINS_PER_DAY) {
|
||||
} else if is_approx_integer(minutes / MINS_PER_DAY) {
|
||||
// Days
|
||||
format!("Day {}", day(x))
|
||||
format!("Day {}", day(minutes))
|
||||
} else {
|
||||
// Hours and minutes
|
||||
format!("{h}:{m:02}", h = hour(x), m = minute(x))
|
||||
format!("{h}:{m:02}", h = hour(minutes), m = minute(minutes))
|
||||
}
|
||||
};
|
||||
|
||||
let y_fmt = |y, _digits, _range: &RangeInclusive<f64>| {
|
||||
// Display only integer percentages
|
||||
if !is_approx_zero(y) && is_approx_integer(100.0 * y) {
|
||||
format!("{:.0}%", percent(y))
|
||||
let percentage_formatter = |mark: GridMark, _digits, _range: &RangeInclusive<f64>| {
|
||||
let percent = 100.0 * mark.value;
|
||||
if is_approx_zero(percent) {
|
||||
String::new() // skip zero
|
||||
} else if is_approx_integer(percent) {
|
||||
// Display only integer percentages
|
||||
format!("{percent:.0}%")
|
||||
} else {
|
||||
String::new()
|
||||
}
|
||||
@@ -565,15 +569,15 @@ impl CustomAxesDemo {
|
||||
ui.label("Zoom in on the X-axis to see hours and minutes");
|
||||
|
||||
let x_axes = vec![
|
||||
AxisHints::default().label("Time").formatter(x_fmt),
|
||||
AxisHints::default().label("Value"),
|
||||
AxisHints::new_x().label("Time").formatter(time_formatter),
|
||||
AxisHints::new_x().label("Value"),
|
||||
];
|
||||
let y_axes = vec![
|
||||
AxisHints::default()
|
||||
AxisHints::new_y()
|
||||
.label("Percent")
|
||||
.formatter(y_fmt)
|
||||
.formatter(percentage_formatter)
|
||||
.max_digits(4),
|
||||
AxisHints::default()
|
||||
AxisHints::new_y()
|
||||
.label("Absolute")
|
||||
.placement(egui_plot::HPlacement::Right),
|
||||
];
|
||||
|
||||
Reference in New Issue
Block a user