Skip to content

Commit 6f2f979

Browse files
authored
fix bug in label_number when scale_cut argument is provided (#413) (#420)
1 parent 91431a1 commit 6f2f979

File tree

2 files changed

+6
-0
lines changed

2 files changed

+6
-0
lines changed

R/label-number.R

+1
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,7 @@ scale_cut <- function(x, breaks, scale = 1, accuracy = NULL, suffix = "") {
350350
if (any(bad_break)) {
351351
# If the break below result in a perfect cut, prefer it
352352
lower_break <- breaks[match(break_suffix[bad_break], names(breaks)) - 1]
353+
lower_break[lower_break == 0] <- 1 # Avoid choosing a non-existent break
353354
improved_break <- (x[bad_break] * scale / lower_break) %% 1 == 0
354355
# Unless the break below is a power of 10 change (1.25 is as good as 1250)
355356
power10_break <- log10(breaks[break_suffix[bad_break]] / lower_break) %% 1 == 0

tests/testthat/test-label-number.R

+5
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,11 @@ test_that("scale_cut prefers clean cuts", {
179179
x <- c(518400, 691200)
180180
# prefers days over week in second element
181181
expect_equal(number(x, scale_cut = cut_time_scale()), c("6d", "8d"))
182+
183+
# do not select off-scale breaks
184+
x <- c(0, 500, 1500, 2000, 2500)
185+
expect_equal(number(x, scale_cut = cut_short_scale()), c("0", "500", "1.5K", "2.0K", "2.5K"))
186+
182187
})
183188

184189
test_that("built-in functions return expected values", {

0 commit comments

Comments
 (0)