Skip to content

Commit 12ba22a

Browse files
committed
Improve the keypoint algorithm
1 parent e482632 commit 12ba22a

File tree

3 files changed

+22
-5
lines changed

3 files changed

+22
-5
lines changed

plotters/plotters-doc-data

plotters/src/chart/mesh.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,8 @@ where
202202
draw_y_axis: true,
203203
x_light_lines_limit: 10,
204204
y_light_lines_limit: 10,
205-
n_x_labels: 10,
206-
n_y_labels: 10,
205+
n_x_labels: 11,
206+
n_y_labels: 11,
207207
bold_line_style: None,
208208
light_line_style: None,
209209
x_label_style: None,

plotters/src/coord/ranged1d/types/numeric.rs

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,10 @@ macro_rules! gen_key_points_comp {
141141
'outer: loop {
142142
let old_scale = scale;
143143
for nxt in [2.0, 5.0, 10.0].iter() {
144-
let new_left = range.0 + scale / nxt - rem_euclid(range.0, scale / nxt);
144+
let mut new_left = range.0 - rem_euclid(range.0, scale / nxt);
145+
if new_left < range.0 {
146+
new_left += scale / nxt;
147+
}
145148
let new_right = range.1 - rem_euclid(range.1, scale / nxt);
146149

147150
let npoints = 1 + ((new_right - new_left) / old_scale * nxt) as usize;
@@ -161,7 +164,13 @@ macro_rules! gen_key_points_comp {
161164
// floating point error.
162165
// In this case, we may loop forever. To avoid this, we need to use two variables to store
163166
// the current left value. So we need keep a left_base and a left_relative.
164-
let left = range.0 + scale - rem_euclid(range.0, scale);
167+
let left = {
168+
let mut value = range.0 - rem_euclid(range.0, scale);
169+
if value < range.0 {
170+
value += scale;
171+
}
172+
value
173+
};
165174
let left_base = (left / value_granularity).floor() * value_granularity;
166175
let mut left_relative = left - left_base;
167176
let right = range.1 - rem_euclid(range.1, scale);
@@ -404,4 +413,12 @@ mod test {
404413
let points = coord.key_points(500);
405414
assert!(points.len() <= 500);
406415
}
416+
417+
#[test]
418+
fn test_coord_follows_hint() {
419+
let coord: RangedCoordf64 = (1.0..2.0).into();
420+
let points = coord.key_points(6);
421+
assert_eq!(points.len(), 6);
422+
assert_eq!(points[0], 1.0);
423+
}
407424
}

0 commit comments

Comments
 (0)