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)

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.