Увеличить количество тиков оси

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

Есть ли способ увеличить количество тиков оси в ggplot2?

Я знаю, что могу сказать ggplot использовать вектор в качестве тиков оси, но я хочу увеличить количество тиков для всех данных. Другими словами, я хочу, чтобы количество тиков было рассчитано по данным.

Возможно, ggplot делает это внутри с некоторым алгоритмом, но я не мог найти, как он это делает, чтобы изменить в соответствии с тем, что я хочу.

Ответ 1

Вы можете переопределить масштаб по умолчанию ggplots, изменив scale_x_continuous и/или scale_y_continuous. Например:

library(ggplot2)
dat <- data.frame(x = rnorm(100), y = rnorm(100))

ggplot(dat, aes(x,y)) +
  geom_point()

Дает вам следующее:

enter image description here

И переопределение шкал может дать вам что-то вроде этого:

ggplot(dat, aes(x,y)) +
  geom_point() +
  scale_x_continuous(breaks = round(seq(min(dat$x), max(dat$x), by = 0.5),1)) +
  scale_y_continuous(breaks = round(seq(min(dat$y), max(dat$y), by = 0.5),1))

enter image description here

Если вы хотите просто "увеличить" на определенной части графика, посмотрите на xlim() и ylim() соответственно. Хорошее понимание также можно найти здесь, чтобы понять и другие аргументы.

Ответ 2

Основываясь на комментарии Дэниела Кризиана, вы также можете использовать функцию pretty_breaks из библиотеки scales, которая импортируется автоматически:

ggplot(dat, aes(x,y)) + geom_point() +
scale_x_continuous(breaks = scales::pretty_breaks(n = 10)) +
scale_y_continuous(breaks = scales::pretty_breaks(n = 10))

Все, что вам нужно сделать, это вставить желаемое количество тиков для n.


Чуть менее полезное решение (поскольку вам снова нужно указать переменную данных), вы можете использовать встроенную pretty функцию:

ggplot(dat, aes(x,y)) + geom_point() +
scale_x_continuous(breaks = pretty(dat$x, n = 10)) +
scale_y_continuous(breaks = pretty(dat$y, n = 10))

Ответ 3

Вы можете предоставить аргумент функции scale, и ggplot будет использовать эту функцию для расчета местоположений тика.

library(ggplot2)
dat <- data.frame(x = rnorm(100), y = rnorm(100))
number_ticks <- function(n) {function(limits) pretty(limits, n)}

ggplot(dat, aes(x,y)) +
  geom_point() +
  scale_x_continuous(breaks=number_ticks(10)) +
  scale_y_continuous(breaks=number_ticks(10))

Ответ 4

Дополнительно,

ggplot(dat, aes(x,y)) +
geom_point() +
scale_x_continuous(breaks = seq(min(dat$x), max(dat$x), by = 0.05))

Работает для биндовых или дискретных масштабированных данных по оси x (т.е. округление не обязательно).