You can define your own function to jump to the breaks argument. An example that will 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 can change this to go through the gap step, for example.
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))
y 2, 4,.., 10 ..
,
my_scale <- function(step = 1, ...) scale_y_continuous(breaks = f(step), ...)
ggplot(df, aes(x,y)) + geom_point() + my_scale()
, , :)