Hoe limieten instellen voor assen in ggplot2 R-plots?

Ik plot het volgende:

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)

Stel nu dat ik alleen de regio tussen x=-5000tot 5000wil plotten, in plaats van het hele bereik.

Hoe kan ik dat doen?


Antwoord 1, autoriteit 100%

In principe heb je twee opties

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

of

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

Waarbij de eerste alle gegevenspunten buiten het opgegeven bereik verwijdert en de tweede alleen het zichtbare gebied aanpast. In de meeste gevallen zou u het verschil niet zien, maar als u iets aan de gegevens zou aanpassen, zou dit waarschijnlijk de aangepaste waarden veranderen.

Je kunt ook de verkorte functie xlim(of ylim) gebruiken, die net als de eerste optie datapunten buiten het opgegeven bereik verwijdert:

+ xlim(-5000, 5000)

Bekijk voor meer informatie de beschrijving van coord_cartesian.

De RStudio cheatsheetvoor ggplot2maakt dit visueel vrij duidelijk . Hier is een klein gedeelte van dat spiekbriefje:

Verdeeld onder CC BY.


Antwoord 2, autoriteit 8%

Snelle opmerking: als u ook coord_flip()gebruikt om de x- en de y-as om te draaien, kunt u geen bereiklimieten instellen met coord_cartesian()omdat die twee functies exclusief zijn (zie hier).

Gelukkig is dit een gemakkelijke oplossing; stel je limieten in binnen coord_flip()als volgt:

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

Dit verandert alleen het zichtbare bereik (d.w.z. er worden geen gegevenspunten verwijderd).

Other episodes