Установите верхний предел в 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]()
Ответы
Ответ 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))))))