diff --git a/src/data/quartiles.rs b/src/data/quartiles.rs index 054f51d1..c3d09b7b 100644 --- a/src/data/quartiles.rs +++ b/src/data/quartiles.rs @@ -62,6 +62,33 @@ impl Quartiles { } } + /// Create a new quartiles struct with pre-calculated values. + /// + /// - `s`: The array of the original values + /// - **returns** The newly created quartiles + /// + /// ```rust + /// use plotters::prelude::*; + /// + /// let quartiles = Quartiles::new_from_values(&[2, 24, 31, 39, 45]); + /// assert_eq!(quartiles.values(), [2.0, 24.0, 31.0, 39.0, 45.0]); + /// ``` + pub fn new_from_values + Copy + PartialOrd>(s: &[T; 5]) -> Self { + let s = s.to_owned(); + assert!(s[0] <= s[1]); + assert!(s[1] <= s[2]); + assert!(s[2] <= s[3]); + assert!(s[3] <= s[4]); + + Self { + lower_fence: s[0].into(), + lower: s[1].into(), + median: s[2].into(), + upper: s[3].into(), + upper_fence: s[4].into(), + } + } + /// Get the quartiles values. /// /// - **returns** The array [lower fence, lower quartile, median, upper quartile, upper fence] diff --git a/src/drawing/backend_impl/piston.rs b/src/drawing/backend_impl/piston.rs index 4a579056..02605fcb 100644 --- a/src/drawing/backend_impl/piston.rs +++ b/src/drawing/backend_impl/piston.rs @@ -34,6 +34,14 @@ fn make_point_pair(a: BackendCoord, b: BackendCoord, scale: f64) -> [f64; 4] { ] } +fn make_circle(center: BackendCoord, radius: u32, scale: f64) -> [f64; 4] { + circle( + center.0 as f64 * scale, + center.1 as f64 * scale, + radius as f64 * scale, + ) +} + impl<'a, 'b> PistonBackend<'a, 'b> { pub fn new(size: (u32, u32), scale: f64, context: Context, graphics: &'b mut G2d<'a>) -> Self { Self { @@ -150,7 +158,7 @@ impl<'a, 'b> DrawingBackend for PistonBackend<'a, 'b> { style: &S, fill: bool, ) -> Result<(), DrawingErrorKind> { - let rect = circle(center.0 as f64, center.1 as f64, radius as f64); + let rect = make_circle(center, radius, self.scale); if fill { ellipse( make_piston_rgba(&style.as_color()), @@ -204,3 +212,13 @@ pub fn draw_piston_window Result<(), Box