Jak ustawić limity dla osi na wykresach ggplot2 R?

358

Spisuję następujące:

library(ggplot2)    

carrots <- data.frame(length = rnorm(500000, 10000, 10000))
cukes <- data.frame(length = rnorm(50000, 10000, 20000))
carrots$veg <- 'carrot'
cukes$veg <- 'cuke'
vegLengths <- rbind(carrots, cukes)

ggplot(vegLengths, aes(length, fill = veg)) +
 geom_density(alpha = 0.2)

Teraz mówią, że tylko chce wykreślić obszar pomiędzy x=-5000celu 5000, zamiast całego zakresu.

Jak mogę to zrobić?

David B.
źródło

Odpowiedzi:

584

Zasadniczo masz dwie opcje

scale_x_continuous(limits = c(-5000, 5000))

lub

coord_cartesian(xlim = c(-5000, 5000)) 

Gdzie pierwszy usuwa wszystkie punkty danych poza podanym zakresem, a drugi dostosowuje tylko widoczny obszar. W większości przypadków różnica nie byłaby widoczna, ale jeśli dopasujesz cokolwiek do danych, prawdopodobnie zmieni to dopasowane wartości.

Możesz także użyć funkcji skrótu xlim(lub ylim), która podobnie jak pierwsza opcja usuwa punkty danych poza podanym zakresem:

+ xlim(-5000, 5000)

Aby uzyskać więcej informacji, sprawdź opis coord_cartesian.

RStudio Ściągawka dla ggplot2marek to całkiem jasne wizualnie. Oto niewielka część tego ściągawki:

wprowadź opis zdjęcia tutaj

Ukazuje się w ramach CC BY .

midtiby
źródło
16
jest też teraz library(scales); ... + scale_x_continuous(limits = c(-5000, 5000), oob=squish)(domyślnie jest oob=censor); zobaczyć ?squish, ?censor: groups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tU
Ben Bolker
5
NB Może to być kłopotliwe, jeśli masz do czynienia z linii / wielokątów gdzie niektóre wierzchołki leżą poza granicami, a cały obiekt jest usuwany z działki
geotheory
1
@geotheory: czy dotyczy to również coord_cartesianpodejścia?
Nick Stauner
1
Nie, powinienem był być bardziej szczegółowy, tylko pierwsza metoda
geotheory
W praktyce do celów „drukowania” coord_cartesian(xlim = prawdopodobnie trzeba będzie również zresetować, ylima także zresetować etykiety i podziały siatki.
PatrickT
44

Szybka uwaga: jeśli używasz także coord_flip()do odwracania osi x i y, nie będziesz w stanie ustawić limitów zakresu, coord_cartesian()ponieważ te dwie funkcje są wyłączne (patrz tutaj ).

Na szczęście jest to łatwa poprawka; ustaw swoje limity w coord_flip()taki sposób:

p + coord_flip(ylim = c(3,5), xlim = c(100, 400))

To po prostu zmienia widoczny zakres (tzn. Nie usuwa punktów danych).

Rachunek
źródło
Mam podobne, ale trudniejsze pytanie, zamieszczone tutaj stackoverflow.com/questions/61531149/... jak ograniczyć TYLKO jedną
STRONĘ