Подтвердить что ты не робот

Ggplot 2 facet_grid "free_y", но заставляя ось Y округлять до ближайшего целого числа

При использовании:

facet_grid(SomeGroup ~, scales="free_y") 

Можно ли указать, что, хотя вы хотите, чтобы шкалы были "свободными", вы хотите, чтобы они были округлены до ближайших целых чисел?

Любая помощь будет очень благодарна.

4b9b3361

Ответ 1

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

Начните с примера:

ggplot(mtcars, aes(wt, mpg)) + 
geom_point() + 
facet_grid(am+cyl~., scales="free_y")

enter image description here

Взглянув на то, как scales::pretty_breaks объединяется, создайте функцию, которая обертывает ее и позволяет только целое разбиение:

library("scales")
integer_breaks <- function(n = 5, ...) {
  breaker <- pretty_breaks(n, ...)
  function(x) {
     breaks <- breaker(x)
     breaks[breaks == floor(breaks)]
  }
}

Теперь используйте функцию, которая возвращается как функция breaks в шкале

ggplot(mtcars, aes(wt, mpg)) + 
geom_point() + 
facet_grid(am+cyl~., scales="free_y") +
scale_y_continuous(breaks = integer_breaks())

enter image description here

Ответ 2

Мне может быть что-то упущено, но я бы сделал что-то вроде этого.

library(ggplot2)
ggplot(mtcars, aes(wt, mpg)) + 
   geom_point() + 
   facet_grid(am+cyl~., scales="free_y", space = "free_y") +
   scale_y_continuous(breaks = seq(0, 40, 2), expand = c(0, 1))

enter image description here