Pete900 - 1 year ago 154
R Question

# Change axis breaks without defining sequence - ggplot

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.

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

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()
``````

I think that shouldn't break anything, but you can never be sure :)

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download