Изменение разрывов оси без определения последовательности - ggplot

есть ли способ установить размер шага разрыва в ggplot без определения последовательности. Например:

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)

вы можете сказать, что я ленив, но было несколько случаев, когда мне пришлось изменить min и max границы моего seq из-за добавления баров ошибок. Так что я хочу сказать...используйте размер разрыва x с автоматическими ограничениями масштаба.

1 ответов


вы можете определить свою собственную функцию для передачи аргументу breaks. Пример, который будет работать в вашем случае будет

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

затем

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

дает

enter image description here

вы можете изменить это, чтобы пройти шаг от разрывов, например,

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

затем

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