Збільшити кількість кліщів осі


191

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

Чи є спосіб збільшити кількість кліщів осі в ggplot2?

Я знаю, що можу сказати ggplot використовувати вектор як осі кліщів, але те, що я хочу, це збільшити кількість кліщів для всіх даних. Іншими словами, я хочу, щоб номер галочки був обчислений з даних.

Можливо, ggplot робить це всередині за допомогою якогось алгоритму, але я не зміг знайти, як це зробити, щоб змінити відповідно до того, що я хочу.

Відповіді:


188

Ви можете змінити масштаб 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()

Надає вам це:

введіть тут опис зображення

А переосмислення ваг може дати вам щось подібне:

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

введіть тут опис зображення

Якщо ви хочете просто «збільшити масштаб» на конкретній частині сюжету, подивіться xlim()і ylim()відповідно. Добре розуміння можна знайти тут , щоб зрозуміти інші аргументи , а також.


4
Насправді суть полягала б у «узагальненні» byаргументу на різних масштабах чисел, тобто 0,5 - це хороше значення для цих даних, діапазон якого c (-3,3), але це не дуже хороший діапазон для даних, діапазон яких становить c (0,5000). Чи є якась функція, яка її обчислює?
João Daniel

3
@ JoãoDaniel - Я маю на увазі, що ggplot автоматично справляється з гідною роботою. Якщо це не дає задовільний набір результатів, я не впевнений, що є вбудована функція, яка забезпечує щось інше. Рівень деталізації, який ви хочете, буде специфічним для вашого сюжету, але, можливо, продумайте деякі тестові випадки та ваш визначений рівень деталізації, щоб визначити зразок ... якби це була коробка, щось подібне max-min/30- це досить поширене "відро" розмір ... але це може бути, а може і не бути гарною відправною точкою для вас.
Чейз

4
А як щодо категоричних значень на осі x, як місяців року для часових рядів?
Скотт Девіс

3
@ScottDavis перегляньте посилання . Можна скористатисяscale_x_date(date_breaks = "5 months", date_minor_breaks = "1 months")
Маркус Хашель

Для масштабування coord_cartesianслід використовувати замість xlim. stackoverflow.com/questions/25685185 / ...
qwr

167

На основі коментаря Даніеля Кризіана ви також можете використовувати 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))

16
Це, очевидно, найкраща відповідь! Btw ggplot вже імпортує, scalesале не додає функцій у ваш простір імен. Тому ви можете їх зателефонувати без імпорту як scales::pretty_breaks(n = 10).
той час як

63

Ви можете надати аргумент функції 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))

81
Не потрібно створювати власну функцію number_ticks. Це вже було реалізовано в Росії pretty_breaks {scales}. Звідси: ggplot(dat, aes(x,y)) + geom_point() + scale_x_continuous(breaks=pretty_breaks(n=10)) + scale_y_continuous(breaks=pretty_breaks(n=10))
Даніель Кризіян

11
@Daniel Krizian: 1) потребує require(scales)2) це, здається, запобігає появі моїх перерв у науковій нотації, отже, 1e6 змінено на 1000000 ??
smci

6
Ви можете використовувати базові R prettyбез scalesпакета, просто наведіть значення як аргумент. Наприклад:(breaks=pretty(dat$x, n=10))
Molx

@smci Якщо ggplot2 працює, то масштаби доступні. ggplot2 не буде працювати без ваг.
Клаус Вільке

7

Майбутня версія v3.3.0 ggplot2буде мати можливість n.breaksавтоматично генерувати перерви для scale_x_continuousтаscale_y_continuous

    devtools::install_github("tidyverse/ggplot2")

    library(ggplot2)

    plt <- ggplot(mtcars, aes(x = mpg, y = disp)) +
      geom_point()

    plt + 
      scale_x_continuous(n.breaks = 5)

введіть тут опис зображення

    plt + 
      scale_x_continuous(n.breaks = 10) +
      scale_y_continuous(n.breaks = 10)

введіть тут опис зображення


4

Крім того,

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

Працює для бінних чи дискретних масштабованих даних по осі x (тобто, округлення не потрібно).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.