Come impostare i limiti per gli assi nei grafici ggplot2 R?


358

Tracciato quanto segue:

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)

Ora dico io voglio solo tracciare la regione tra x=-5000a 5000, invece di tutta la gamma.

Come lo posso fare?

Risposte:


585

Fondamentalmente hai due opzioni

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

o

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

Dove il primo rimuove tutti i punti dati al di fuori dell'intervallo specificato e il secondo regola solo l'area visibile. Nella maggior parte dei casi non vedresti la differenza, ma se si adatta qualcosa ai dati, probabilmente cambierebbe i valori adattati.

Puoi anche usare la funzione abbreviata xlim(o ylim), che come la prima opzione rimuove i punti dati al di fuori dell'intervallo dato:

+ xlim(-5000, 5000)

Per ulteriori informazioni, consultare la descrizione di coord_cartesian.

Il cheatheet di RStudio per lo ggplot2rende abbastanza chiaro visivamente. Ecco una piccola sezione di quel cheatheet:

inserisci qui la descrizione dell'immagine

Distribuito sotto CC BY .


16
c'è anche ora library(scales); ... + scale_x_continuous(limits = c(-5000, 5000), oob=squish)(il default è oob=censor); vedi ?squish, ?censor: groups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tU
Ben Bolker

5
NB. questo potrebbe essere problematico se hai a che fare con linee / poligoni in cui alcuni vertici sono al di fuori dei limiti, poiché l'intero oggetto viene rimosso dalla trama
geotheory

1
@geotheory: è vero anche per l' coord_cartesianapproccio?
Nick Stauner,

1
No, avrei dovuto essere più specifico, solo il primo metodo
geoteca il

In pratica, ai fini della "stampa", coord_cartesian(xlim = probabilmente è necessario ripristinare ylimanche le interruzioni di etichetta e griglia.
Patrick,

44

Nota rapida: se si utilizza anche coord_flip()per capovolgere l'asse xe y, non sarà possibile impostare i limiti di intervallo utilizzando coord_cartesian()perché queste due funzioni sono esclusive (vedere qui ).

Fortunatamente, questa è una soluzione semplice; imposta i tuoi limiti in questo coord_flip()modo:

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

Ciò altera solo l'intervallo visibile (ovvero non rimuove i punti dati).


Una domanda simile ma più difficile pubblicata qui stackoverflow.com/questions/61531149/… su come limitare un SOLO LATO
IVIM
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.