14 votes

définir la limite supérieure dans ggplot pour inclure les étiquettes supérieures à la valeur maximale

Ma plage de données semble toujours être supérieure à l'étiquette supérieure de l'axe des ordonnées. Existe-t-il un moyen de l'inclure automatiquement sans avoir à définir manuellement des limites ?

par exemple dans

ggplot(data.frame(x=1:11, y=c(11:17,5:2)), aes(x,y)) + geom_point()

J'aimerais que les étiquettes 0 et 20 apparaissent sur l'axe des y et que o et 12 apparaissent sur l'axe des x (et que le graphique s'agrandisse en conséquence). Cela devrait se faire automatiquement sans avoir à spécifier ces nombres dans les options d'échelle par exemple.

enter image description here

12voto

Stuples Points 1356

Qu'en est-il de la solution suivante :

library(ggplot2)

d <- data.frame(x=1:11, y=c(11:17,5:2))
px <- pretty(d$x)
py <- pretty(d$y)

ggplot(d, aes(x,y)) + geom_point() +
  scale_x_continuous(breaks=px, limits=range(px)) +
  scale_y_continuous(breaks=py, limits=range(px))

enter image description here

10voto

sebastian-c Points 5657
dat<-data.frame(x=1:10, y=c(11:17,5:3))
ggplot(dat, aes(x,y)) + 
  geom_point()+
  scale_y_continuous(breaks=c(pretty(dat$y, n=4),18), expand=c(0.25, 0.25))

ggplot pretty breaks

Les pretty choisit des pauses agréables comme 1, 2 ou 5 fois une puissance de 10. J'ai ensuite ajouté 18 à ce vecteur.

3voto

rengis Points 4733

Peut-être avec scale_y_continuous et le expand argument :

ggplot(data.frame(x=1:10, y=c(11:17,5:3)), aes(x,y)) +
  geom_point() +
  scale_y_continuous(expand=c(0.5, 0.5))

3voto

Tom Points 509

Je ne pense donc pas que expand est en fait la meilleure façon de procéder. expand_limits . Ce n'est évidemment pas le code le plus beau, mais c'est essentiellement la fonctionnalité que je recherche, où les étiquettes sur l'axe des ordonnées englobent complètement les données.

dat<-data.frame(x=1:10, y=c(11:17,5:3))
ggplot(dat, aes(x,y)) + 
geom_point() + 
expand_limits(y=c(min(pretty(c(dat$y, min(dat$y) * (0.95)))), max(pretty(c(dat$y, max(dat$y) * (1.05))))))

scales completely surrounding data

J'ai supposé que l'extension par défaut était de 0,05 et que le joli était utilisé avec les valeurs par défaut. Existe-t-il une meilleure façon de procéder ?

0voto

Jeremy Points 1

Avez-vous essayé d'ignorer les multiplicateurs 0,95 * 1,05 ?

expand_limits(y=c(min(pretty(c(dat$y,min(dat$y)))),max(pretty(c(dat$y,max(dat$y))))))

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