Ogranicz osie ggplot2 bez usuwania danych (poza granicami): powiększenie

106

Jeśli określisz granice osi w ggplot, punkty odstające zostaną usunięte. Jest to dobre dla punktów, ale możesz chcieć wykreślić linie, które przecinają się z określonym zakresem, ale ggplot rangelub xlim/ylimmetody je usuwają. Czy istnieje inny sposób określenia zakresu osi wykresu bez usuwania danych odstających?

na przykład

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)
geoteoria
źródło

Odpowiedzi:

170

Hadley wyjaśnia to na s. 99; 133 z jego książki ggplot2 (wydanie 1) lub s. 160–161, jeśli masz drugie wydanie .

Problem polega na tym, że, jak mówisz, limitswewnątrz skali lub ustawienia ylim()dane są wyrzucane, ponieważ ograniczają dane. Aby uzyskać prawdziwy zoom (zachowaj wszystkie dane), musisz ustawić granice w kartezjańskim układzie współrzędnych (lub w innych układach współrzędnych https://ggplot2.tidyverse.org/reference/#section-coordinate-systems ). Więcej na: http://docs.ggplot2.org/current/coord_cartesian.html

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

wprowadź opis obrazu tutaj

Tyler Rinker
źródło
2
A co jeśli koordyn_cartesian nie jest opcją, ponieważ używam geom_boxplot?
Everettss
3
coord_cartesianjest nadal opcją z geom_boxplotlub innymi geomami.
eipi10
Tak, ale nie mogę wymyślić, jak wykonać poziome wykresy pudełkowe, ponieważ wymaga to coord_flipi nie możesz mieć dwóch współrzędnych.
jtr13
2
Nieważne, coord_flipzamiast tego możesz ustawić ylim's in coord_cartesian.
jtr13