Forcer l'origine à commencer à 0

139

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

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

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

Jonas Stein
la source

Réponses:

199

xlimet ylimne le coupez pas ici. Vous devez utiliser expand_limits, scale_x_continuouset scale_y_continuous. Essayer:

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

entrez la description de l'image ici

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

entrez la description de l'image ici

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 = 5et y = 5.

A5C1D2H2I1M1N2O1R2T1
la source
29
J'avais également besoin de spécifier des limites scale_x_continuous(expand = c(0, 0), limits = c(0,5))
:, d'une
3
Je pense qu'une autre pièce peut être utile, qui utilise quelque chose comme expand=expand_scale(mult=c(0,0.1))si vous obtenez toujours le rembourrage aux extrémités supérieures: stackoverflow.com/a/59056123/8400969
Michael
4

Ajoutez-les simplement à 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))

entrez la description de l'image ici

Enfin, prendre grand soin de ne pas exclure involontairement les données sur votre carte . Par exemple, a position = 'dodge'pourrait faire en sorte qu'une barre soit complètement laissée hors du graphique (par exemple, si sa valeur est zéro et que vous démarrez l'axe à zéro), vous risquez donc de ne pas la voir et même de ne pas savoir qu'elle est là. Je recommande de tracer d'abord les données en entier, d'inspecter, puis d'utiliser le conseil ci-dessus pour améliorer l'esthétique de l'intrigue.

stevec
la source
est-il également possible d'intégrer cela dans un nouveau thème ggplot?
Bolle
@Bolle Je ne suis pas sûr, mais intéressé à le savoir également, vous pouvez poser une question distincte et un lien vers ici
stevec
Lien ici pour référence future
stevec