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

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

Мой диапазон данных всегда больше, чем верхняя метка по оси y. Есть ли способ, я могу автоматически включить его без ручной установки пределов?

например. в

ggplot(data.frame(x=1:11, y=c(11:17,5:2)), aes(x,y)) + geom_point()

Я хотел бы, чтобы метки 0 и 20 отображались на оси y, а o и 12 отображались на оси x (и график расширялся соответственно). Это должно быть сделано автоматически, не указывая эти числа в параметрах масштаба, например.

enter image description here

4b9b3361

Ответ 1

Как насчет следующего решения:

library(ggplot2)

d <- data.frame(x=1:11, y=c(11:17,5:2))
px <- pretty(d$x)
py <- pretty(d$y)

ggplot(d, aes(x,y)) + geom_point() +
  scale_x_continuous(breaks=px, limits=range(px)) +
  scale_y_continuous(breaks=py, limits=range(px))

enter image description here

Ответ 2

dat<-data.frame(x=1:10, y=c(11:17,5:3))
ggplot(dat, aes(x,y)) + 
  geom_point()+
  scale_y_continuous(breaks=c(pretty(dat$y, n=4),18), expand=c(0.25, 0.25))

ggplot pretty breaks

Функция pretty выбирает хорошие разрывы как 1, 2 или 5 раз по мощности 10. Тогда я просто включил 18 в этот вектор.

Ответ 3

Возможно, с аргументом scale_y_continuous и expand:

ggplot(data.frame(x=1:10, y=c(11:17,5:3)), aes(x,y)) +
  geom_point() +
  scale_y_continuous(expand=c(0.5, 0.5))

Ответ 4

Поэтому я не думаю, что expand - это на самом деле способ обойти это, а не expand_limits. Это явно не самый красивый код, но в основном это функциональность, которую я ищу, где метки на оси y полностью охватывают данные.

dat<-data.frame(x=1:10, y=c(11:17,5:3))
ggplot(dat, aes(x,y)) + 
geom_point() + 
expand_limits(y=c(min(pretty(c(dat$y, min(dat$y) * (0.95)))), max(pretty(c(dat$y, max(dat$y) * (1.05))))))

scales completely surrounding data

Я предположил, что значение по умолчанию равно 0.05, и это довольно используется со значениями по умолчанию. Есть ли лучший способ сделать это?

Ответ 5

Вы пробовали пропустить множители 0,95 * 1,05?

expand_limits(y=c(min(pretty(c(dat$y,min(dat$y)))),max(pretty(c(dat$y,max(dat$y))))))