pub struct Plot { /* private fields */ }
Expand description
A 2D plot, e.g. a graph of a function.
Plot
supports multiple lines and points.
use egui::plot::{Line, Plot, PlotPoints};
let sin: PlotPoints = (0..1000).map(|i| {
let x = i as f64 * 0.01;
[x, x.sin()]
}).collect();
let line = Line::new(sin);
Plot::new("my_plot").view_aspect(2.0).show(ui, |plot_ui| plot_ui.line(line));
Implementations
sourceimpl Plot
impl Plot
sourcepub fn data_aspect(self, data_aspect: f32) -> Plot
pub fn data_aspect(self, data_aspect: f32) -> Plot
width / height ratio of the data.
For instance, it can be useful to set this to 1.0
for when the two axes show the same
unit.
By default the plot window’s aspect ratio is used.
sourcepub fn view_aspect(self, view_aspect: f32) -> Plot
pub fn view_aspect(self, view_aspect: f32) -> Plot
width / height ratio of the plot region. By default no fixed aspect ratio is set (and width/height will fill the ui it is in).
sourcepub fn width(self, width: f32) -> Plot
pub fn width(self, width: f32) -> Plot
Width of plot. By default a plot will fill the ui it is in.
If you set Self::view_aspect
, the width can be calculated from the height.
sourcepub fn height(self, height: f32) -> Plot
pub fn height(self, height: f32) -> Plot
Height of plot. By default a plot will fill the ui it is in.
If you set Self::view_aspect
, the height can be calculated from the width.
sourcepub fn show_x(self, show_x: bool) -> Plot
pub fn show_x(self, show_x: bool) -> Plot
Show the x-value (e.g. when hovering). Default: true
.
sourcepub fn show_y(self, show_y: bool) -> Plot
pub fn show_y(self, show_y: bool) -> Plot
Show the y-value (e.g. when hovering). Default: true
.
sourcepub fn center_x_axis(self, on: bool) -> Plot
pub fn center_x_axis(self, on: bool) -> Plot
Always keep the x-axis centered. Default: false
.
sourcepub fn center_y_axis(self, on: bool) -> Plot
pub fn center_y_axis(self, on: bool) -> Plot
Always keep the y-axis centered. Default: false
.
sourcepub fn allow_zoom(self, on: bool) -> Plot
pub fn allow_zoom(self, on: bool) -> Plot
Whether to allow zooming in the plot. Default: true
.
sourcepub fn allow_scroll(self, on: bool) -> Plot
pub fn allow_scroll(self, on: bool) -> Plot
Whether to allow scrolling in the plot. Default: true
.
sourcepub fn set_margin_fraction(self, margin_fraction: Vec2) -> Plot
pub fn set_margin_fraction(self, margin_fraction: Vec2) -> Plot
Set the side margin as a fraction of the plot size.
For instance, a value of 0.1
will add 10% space on both sides.
sourcepub fn allow_boxed_zoom(self, on: bool) -> Plot
pub fn allow_boxed_zoom(self, on: bool) -> Plot
Whether to allow zooming in the plot by dragging out a box with the secondary mouse button.
Default: true
.
Config the button pointer to use for boxed zooming. Default: Secondary
sourcepub fn allow_drag(self, on: bool) -> Plot
pub fn allow_drag(self, on: bool) -> Plot
Whether to allow dragging in the plot to move the bounds. Default: true
.
sourcepub fn label_formatter(
self,
label_formatter: impl Fn(&str, &PlotPoint) -> String + 'static
) -> Plot
pub fn label_formatter(
self,
label_formatter: impl Fn(&str, &PlotPoint) -> String + 'static
) -> Plot
Provide a function to customize the on-hover label for the x and y axis
use egui::plot::{Line, Plot, PlotPoints};
let sin: PlotPoints = (0..1000).map(|i| {
let x = i as f64 * 0.01;
[x, x.sin()]
}).collect();
let line = Line::new(sin);
Plot::new("my_plot").view_aspect(2.0)
.label_formatter(|name, value| {
if !name.is_empty() {
format!("{}: {:.*}%", name, 1, value.y)
} else {
"".to_owned()
}
})
.show(ui, |plot_ui| plot_ui.line(line));
sourcepub fn coordinates_formatter(
self,
position: Corner,
formatter: CoordinatesFormatter
) -> Plot
pub fn coordinates_formatter(
self,
position: Corner,
formatter: CoordinatesFormatter
) -> Plot
Show the pointer coordinates in the plot.
sourcepub fn x_axis_formatter(
self,
func: impl Fn(f64, &RangeInclusive<f64>) -> String + 'static
) -> Plot
pub fn x_axis_formatter(
self,
func: impl Fn(f64, &RangeInclusive<f64>) -> String + 'static
) -> Plot
Provide a function to customize the labels for the X axis based on the current visible value range.
This is useful for custom input domains, e.g. date/time.
If axis labels should not appear for certain values or beyond a certain zoom/resolution, the formatter function can return empty strings. This is also useful if your domain is discrete (e.g. only full days in a calendar).
sourcepub fn y_axis_formatter(
self,
func: impl Fn(f64, &RangeInclusive<f64>) -> String + 'static
) -> Plot
pub fn y_axis_formatter(
self,
func: impl Fn(f64, &RangeInclusive<f64>) -> String + 'static
) -> Plot
Provide a function to customize the labels for the Y axis based on the current value range.
This is useful for custom value representation, e.g. percentage or units.
If axis labels should not appear for certain values or beyond a certain zoom/resolution, the formatter function can return empty strings. This is also useful if your Y values are discrete (e.g. only integers).
sourcepub fn x_grid_spacer(
self,
spacer: impl Fn(GridInput) -> Vec<GridMark, Global> + 'static
) -> Plot
pub fn x_grid_spacer(
self,
spacer: impl Fn(GridInput) -> Vec<GridMark, Global> + 'static
) -> Plot
Configure how the grid in the background is spaced apart along the X axis.
Default is a log-10 grid, i.e. every plot unit is divided into 10 other units.
The function has this signature:
fn step_sizes(input: GridInput) -> Vec<GridMark>;
This function should return all marks along the visible range of the X axis.
step_size
also determines how thick/faint each line is drawn.
For example, if x = 80..=230 is visible and you want big marks at steps of
100 and small ones at 25, you can return:
vec![
// 100s
GridMark { value: 100.0, step_size: 100.0 },
GridMark { value: 200.0, step_size: 100.0 },
// 25s
GridMark { value: 125.0, step_size: 25.0 },
GridMark { value: 150.0, step_size: 25.0 },
GridMark { value: 175.0, step_size: 25.0 },
GridMark { value: 225.0, step_size: 25.0 },
];
There are helpers for common cases, see log_grid_spacer
and uniform_grid_spacer
.
sourcepub fn y_grid_spacer(
self,
spacer: impl Fn(GridInput) -> Vec<GridMark, Global> + 'static
) -> Plot
pub fn y_grid_spacer(
self,
spacer: impl Fn(GridInput) -> Vec<GridMark, Global> + 'static
) -> Plot
Default is a log-10 grid, i.e. every plot unit is divided into 10 other units.
See Self::x_grid_spacer
for explanation.
sourcepub fn include_x(self, x: impl Into<f64>) -> Plot
pub fn include_x(self, x: impl Into<f64>) -> Plot
Expand bounds to include the given x value.
For instance, to always show the y axis, call plot.include_x(0.0)
.
sourcepub fn include_y(self, y: impl Into<f64>) -> Plot
pub fn include_y(self, y: impl Into<f64>) -> Plot
Expand bounds to include the given y value.
For instance, to always show the x axis, call plot.include_y(0.0)
.
sourcepub fn show_background(self, show: bool) -> Plot
pub fn show_background(self, show: bool) -> Plot
Whether or not to show the background Rect
.
Can be useful to disable if the plot is overlaid over existing content.
Default: true
.
sourcepub fn show_axes(self, show: [bool; 2]) -> Plot
pub fn show_axes(self, show: [bool; 2]) -> Plot
Show the axes.
Can be useful to disable if the plot is overlaid over an existing grid or content.
Default: [true; 2]
.
sourcepub fn link_axis(self, group: LinkedAxisGroup) -> Plot
pub fn link_axis(self, group: LinkedAxisGroup) -> Plot
Add a LinkedAxisGroup
so that this plot will share the bounds with other plots that have this
group assigned. A plot cannot belong to more than one group.