Ограничить оси ggplot2 без удаления данных (вне пределов): увеличение
Если вы задаете пределы оси в ggplot, удаленные точки удаляются. Это хорошо для точек, но вы можете построить линии, которые пересекаются с указанным диапазоном, но ggplot range
или же xlim/ylim
методы удаляют это. Есть ли другой способ указать диапазон оси графика без удаления внешних данных?
например
require(ggplot2)
d = data.frame(x=c(1,4,7,2,9,7), y=c(2,5,4,10,5,3), grp=c('a','a','b','b','c','c'))
ggplot(d, aes(x, y, group=grp)) + geom_line()
ggplot(d, aes(x, y, group=grp)) + geom_line() + scale_y_continuous(limits=c(0,7))
ggplot(d, aes(x, y, group=grp)) + geom_line() + ylim(0,7)
2 ответа
Хэдли объясняет это на стр. 99; 133 из его книги ggplot2 (1-е издание), или с. 160 - 161, если у вас есть второе издание
Проблема в том, что, как вы говорите, limits
внутри шкалы или настройки ylim
вызывает выброс данных, поскольку они ограничивают данные. Для истинного масштабирования (сохраните все данные) вам необходимо установить пределы внутри декартовой системы координат. Для получения дополнительной информации см.: http://docs.ggplot2.org/current/coord_cartesian.html
ggplot(d, aes(x, y, group=grp)) + geom_line() +
coord_cartesian(ylim=c(0, 7))
Просто для полноты вот визуальное руководство по этому поведению:
df <- data.frame(
trt = c( 2, 3, 3.8, 5, 6),
resp = c( 2.5, 3, 3.8, 3, 3.8),
upper = c( 3, 3.3, 4.5, 3.3, 4.5),
lower = c( 2, 2.4, 3.4, 2.4, 3.4)
)
p <- ggplot() +
geom_point(data = df,
aes(x = trt,
y = resp)) +
geom_errorbar(data = df,
aes(x = trt,
y = resp,
ymin = lower,
ymax = upper),
width = 0) +
coord_flip() +
theme_bw() +
theme(plot.margin = margin(0.5, 3, 0.5, 0.5, "cm"))
p
p +
scale_y_continuous(limits = c(1, 4))
p +
coord_flip(ylim = c(1, 4))
p +
coord_flip(ylim = c(1, 4),
clip = 'off')