187 votes

Forcer l'origine à commencer à 0

Comment puis-je définir l'origine / l'interception de l'axe des y et de l'axe des x dans ggplot2 ?

La ligne de l'axe des x devrait être exactement à y=Z .

Avec Z=0 ou une autre valeur donnée.

246voto

Ananda Mahto Points 67213

xlim et ylim n'y coupe pas. Vous devez utiliser expand_limits , scale_x_continuous y scale_y_continuous . Essayez :

df <- data.frame(x = 1:5, y = 1:5)
p <- ggplot(df, aes(x, y)) + geom_point()
p <- p + expand_limits(x = 0, y = 0)
p # not what you are looking for

enter image description here

p + scale_x_continuous(expand = c(0, 0)) + scale_y_continuous(expand = c(0, 0))

enter image description here

Vous devrez peut-être ajuster un peu les choses pour vous assurer que les points ne sont pas coupés (voir, par exemple, le point à x = 5 et y = 5 .

26voto

user5783745 Points 1214

Il suffit de les ajouter à votre ggplot :

+ scale_x_continuous(expand = c(0, 0), limits = c(0, NA)) + 
  scale_y_continuous(expand = c(0, 0), limits = c(0, NA))

Exemple

df <- data.frame(x = 1:5, y = 1:5)
p <- ggplot(df, aes(x, y)) + geom_point()
p <- p + expand_limits(x = 0, y = 0)
p # not what you are looking for

p + scale_x_continuous(expand = c(0, 0), limits = c(0,NA)) + 
  scale_y_continuous(expand = c(0, 0), limits = c(0, NA))

enter image description here

Enfin, prendre grand veiller à ne pas exclure involontairement des données de votre graphique . Par exemple, un position = 'dodge' peut faire en sorte qu'une barre soit complètement absente du graphique (par exemple, si sa valeur est nulle et que vous faites commencer l'axe à zéro), de sorte que vous ne la verrez peut-être pas et ne saurez peut-être même pas qu'elle est là. Je vous recommande de commencer par tracer les données dans leur intégralité, de les inspecter, puis d'utiliser l'astuce ci-dessus pour améliorer l'esthétique du graphique.

5voto

Shixiang Wang Points 182

Dans la dernière version de ggplot2, cela peut être plus facile.

p <- ggplot(mtcars, aes(wt, mpg))
p + geom_point()
p+ geom_point() + scale_x_continuous(expand = expansion(mult = c(0, 0))) + scale_y_continuous(expand = expansion(mult = c(0, 0)))

enter image description here

Voir ?expansion() pour plus de détails.

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