14

Is there any way to set the break step size in ggplot without defining a sequence. For example:

x <- 1:10 y <- 1:10 df <- data.frame(x, y) # Plot with auto scale ggplot(df, aes(x,y)) + geom_point() # Plot with breaks defined by sequence ggplot(df, aes(x,y)) + geom_point() + scale_y_continuous(breaks = seq(0,10,1)) # Plot with automatic sequence for breaks ggplot(df, aes(x,y)) + geom_point() + scale_y_continuous(breaks = seq(min(df$y),max(df$y),1)) # Does this exist? ggplot(df, aes(x,y)) + geom_point() + scale_y_continuous(break_step = 1) 

You may say I am being lazy but there have been a few occasions where I have had to change the min and max limits of my seq due to the addition of error bars. So I just want to say...use a break size of x, with automatic scale limits.

2 Answers 2

22

You can define your own function to pass to the breaks argument. An example that would work in your case would be

f <- function(y) seq(floor(min(y)), ceiling(max(y))) 

Then

ggplot(df, aes(x,y)) + geom_point() + scale_y_continuous(breaks = f) 

gives

enter image description here

You could modify this to pass the step of the breaks, e.g.

f <- function(k) { step <- k function(y) seq(floor(min(y)), ceiling(max(y)), by = step) } 

then

ggplot(df, aes(x,y)) + geom_point() + scale_y_continuous(breaks = f(2)) 

would create a y-axis with ticks at 2, 4, .., 10, etc.

You can take this even further by writing your own scale function

my_scale <- function(step = 1, ...) scale_y_continuous(breaks = f(step), ...) 

and just call it like

ggplot(df, aes(x,y)) + geom_point() + my_scale() 
Sign up to request clarification or add additional context in comments.

1 Comment

This was HUGE for me
4
> # Does this exist? > ggplot(df, aes(x,y)) + geom_point() + > scale_y_continuous(break_step = 1) 

If you're looking for an off-the-shelf solution, then you can use the scales::breaks_width() function like so:

scale_y_continuous(breaks = scales::breaks_width(1)) 

The scales package also includes handy functions to control breaks easily in "special" scales such as date-time, e.g. scale_x_datetime(breaks='6 hours').

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.