Ограничить оси ggplot2 без удаления данных (вне пределов): масштабирование


106

Если вы укажете пределы оси в 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)

Ответы:


170

Хэдли объясняет это на стр. 99; 133 его книги ggplot2 (1-е издание) или стр. 160 - 161, если у вас есть второе издание .

Проблема в том, что, как вы говорите, limitsвнутри шкалы или настройки ylim()данные отбрасываются, поскольку они ограничивают данные. Для истинного масштабирования (сохраните все данные) вам необходимо установить пределы внутри декартовой системы координат (или других систем координат https://ggplot2.tidyverse.org/reference/#section-coordinate-systems ). Подробнее см .: http://docs.ggplot2.org/current/coord_cartesian.html.

ggplot(d, aes(x, y, group=grp)) + 
    geom_line() + 
    coord_cartesian(ylim=c(0, 7))

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


2
Что делать, если corre_cartesian не подходит, потому что я использую geom_boxplot?
Everettss

3
coord_cartesianвсе еще вариант с geom_boxplotили другими геометриями.
eipi10

Да, но не могу понять, как делать горизонтальные диаграммы, поскольку для этого требуется, coord_flipа у вас не может быть двух координат.
jtr13 05

2
Неважно, вы можете установить илилим coord_flipвместо coord_cartesianэтого.
jtr13 05
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.