Skip to content

report a bug in ScaleBinned$get_breaks() #3574

Closed
@microly

Description

@microly

hi, @thomasp85
Firstly, thank you for your hard works to improve ggplot2!

I think there is a small bug in ScaleBinned$get_breaks(), which is in:

ggplot2/R/scale-.r

Lines 991 to 993 in 115c396

} else if (is.function(self$breaks)) {
breaks <- self$breaks(limits, self$n_bins)
} else {

As I known, end users has no way to set the value of ScaleBinned$n_bins, which has a NULL value by default.
So, when the breaks is a function provided by users, the function's second parameter will always set to be NULL.
As a consequence, users cannot get meaningful breaks by set breaks as a function in the scales, such as scale_colour_stepsn.

This is a simple example:

df <- data.frame(
    x = runif(100),
    y = runif(100),
    z = rnorm(100)
)

brk <- function(limits, n_bins) {
    if (is.null(n_bins))
        stop("n_bins is always set to be NULL, users cannot implement useful function for breaks.")
    else cat("users can set the value of n_bins, and get meaningful breaks using the values of limits and n_bins.")
}

library(ggplot2)

ggplot(df, aes(x, y)) +
    geom_point(aes(colour = z)) +
    scale_colour_stepsn(colours = terrain.colors(10), breaks = brk)

# Error in f(...) : 
# n_bins is always set to be NULL, users cannot implement useful function for breaks. 

I will opening a pull request for this bug, please consider it, thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions