From 5f3d80185139a2b744f4f9bfb420c91baf56b186 Mon Sep 17 00:00:00 2001 From: genius Date: Sun, 31 May 2020 11:32:58 +0200 Subject: [PATCH 1/3] Fix pistons scaling of circles --- src/drawing/backend_impl/piston.rs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/drawing/backend_impl/piston.rs b/src/drawing/backend_impl/piston.rs index 4a579056..80e59cd6 100644 --- a/src/drawing/backend_impl/piston.rs +++ b/src/drawing/backend_impl/piston.rs @@ -150,7 +150,11 @@ 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 = circle( + center.0 as f64 * self.scale, + center.1 as f64 * self.scale, + radius as f64 * self.scale, + ); if fill { ellipse( make_piston_rgba(&style.as_color()), From 5244a9fdfe0e47b608dc25f5c7a18e3ba9149384 Mon Sep 17 00:00:00 2001 From: genius Date: Tue, 2 Jun 2020 10:37:43 +0200 Subject: [PATCH 2/3] refactored call to piston_window::circle into make_circle and added unit-test for it --- src/drawing/backend_impl/piston.rs | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/drawing/backend_impl/piston.rs b/src/drawing/backend_impl/piston.rs index 80e59cd6..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,11 +158,7 @@ impl<'a, 'b> DrawingBackend for PistonBackend<'a, 'b> { style: &S, fill: bool, ) -> Result<(), DrawingErrorKind> { - let rect = circle( - center.0 as f64 * self.scale, - center.1 as f64 * self.scale, - radius as f64 * self.scale, - ); + let rect = make_circle(center, radius, self.scale); if fill { ellipse( make_piston_rgba(&style.as_color()), @@ -208,3 +212,13 @@ pub fn draw_piston_window Result<(), Box Date: Sat, 15 Aug 2020 11:47:06 -0400 Subject: [PATCH 3/3] Feature: new `Quartiles` from precalculated values --- src/data/quartiles.rs | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) 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]