438 votes

Comment définir les limites des axes dans les graphiques R ggplot2 ?

Je trace ce qui suit :

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)

Maintenant, disons que je veux seulement tracer la région entre x=-5000 a 5000 au lieu de l'ensemble de la gamme.

Comment puis-je faire ça ?

709voto

midtiby Points 3351

En gros, vous avez deux possibilités

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

o

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

La première supprime tous les points de données situés en dehors de la plage donnée et la seconde ajuste uniquement la zone visible. Dans la plupart des cas, vous ne verrez pas la différence, mais si vous ajustez quelque chose aux données, cela changera probablement les valeurs ajustées.

Vous pouvez également utiliser la fonction raccourcie xlim (ou ylim ), qui, comme la première option, supprime les points de données en dehors de la plage donnée :

+ xlim(-5000, 5000)

Pour plus d'informations, consultez la description de coord_cartesian .

El Fiche technique de RStudio para ggplot2 rend cela très clair visuellement. Voici une petite partie de cette feuille de route :

enter image description here

Distribué sous CC BY .

20 votes

Il y a aussi maintenant library(scales); ... + scale_x_continuous(limits = c(-5000, 5000), oob=squish) (la valeur par défaut est oob=censor ) ; voir ?squish , ?censor : groups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tU

6 votes

NB : cela peut être problématique si vous avez affaire à des lignes/polygones dont certains sommets sont en dehors des limites, car l'objet entier est retiré du tracé.

1 votes

@geotheory : est-ce que c'est aussi vrai de la coord_cartesian approche ?

58voto

Bill Points 510

Remarque rapide : si vous utilisez également coord_flip() pour inverser l'axe des x et des y, vous ne pourrez pas définir les limites de la plage en utilisant coord_cartesian() car ces deux fonctions sont exclusives (voir aquí ).

Heureusement, il s'agit d'un problème facile à résoudre : fixez vos limites à l'intérieur de coord_flip() comme ça :

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

Cela ne fait que modifier la plage visible (c'est-à-dire que cela ne supprime pas les points de données).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X