129 votes

Augmenter la distance entre le texte et le titre sur l'axe des y

Le titre de l'axe des y est trop proche du texte de l'axe.

ggplot(mpg, aes(cty, hwy)) + geom_point()

ggplot output

J'ai essayé de changer la valeur de nombreux paramètres avec theme() mais aucune ne semble aider.

207voto

Didzis Elferts Points 29673

De ggplot2 2.0.0 vous pouvez utiliser le margin = argument de element_text() pour modifier la distance entre le titre de l'axe et les chiffres. Définissez les valeurs de l'élément margin en t op, r ight, b ottom, et l côté gauche de l'élément.

ggplot(mpg, aes(cty, hwy)) + geom_point()+
  theme(axis.title.y = element_text(margin = margin(t = 0, r = 20, b = 0, l = 0)))

margin peut également être utilisé pour d'autres element_text (voir ?theme ), tels que axis.text.x , axis.text.y y title .

ajout

afin de définir la marge pour les titres d'axe lorsque l'axe a une position différente (par exemple, avec l'option scale_x_...(position = "top") vous aurez besoin d'un paramètre de thème différent, par exemple axis.title.x.top . Voir https://github.com/tidyverse/ggplot2/issues/4343 .

125voto

Adam B Points 1110

Basé sur ce post de forum : https://groups.google.com/forum/#!topic/ggplot2/mK9DR3dKIBU

Il semble que la chose la plus simple à faire est d'ajouter un saut de ligne ( \n ) avant les étiquettes de l'axe des x, et après celles de l'axe des y. Cela semble beaucoup plus facile (mais plus bête) que les solutions proposées ci-dessus.

ggplot(mpg, aes(cty, hwy)) + 
    geom_point() + 
    xlab("\nYour_x_Label") + ylab("Your_y_Label\n")

J'espère que cela vous aidera !

1voto

Omar Wasow Points 348

Une solution qui offre un contrôle plus fin que celui de la \n mais il est moins encombrant que d'ajouter des marges est d'utiliser vjust en el theme fonction.

Pour ajuster la position sur l'axe des ordonnées ou l'axe des abscisses afin d'ajouter de l'espace, il faut souvent utiliser une fonction valeur positive pour vjust (axe des ordonnées) ou une valeur négative pour vjust (axe des x) comme dans theme(axis.title.y = element_text(vjust = 2)) . Voir un exemple complet ci-dessous.

# load patchwork to show plots side-by-side
library(patchwork)
library(ggplot2)

# Plot A: just for comparison, moving titles *inward*
p1 <- ggplot(mpg, aes(cty, hwy)) + 
  geom_point() + 
  theme_gray() +
  theme(
    axis.title.y = element_text(vjust = -3),
    axis.title.x = element_text(vjust = +3)
  ) 

# Plot B: what we want, moving titles *outward*
p2 <- ggplot(mpg, aes(cty, hwy)) + 
  geom_point() + 
  theme_gray() +
  theme(
    axis.title.y = element_text(vjust = +3),
    axis.title.x = element_text(vjust = -0.75)
  ) 

# show plots side-by-side with patchwork package
p1 + p2 +
  plot_annotation(tag_levels = "A")

enter image description here

0voto

Marco Stamazza Points 326

Pour une raison quelconque, l'argument de la marge suggéré par Didzis Elferts n'a pas fonctionné pour moi. J'ai donc utilisé une autre astuce qui est plus flexible que l'ajout d'une ligne vide mais qui nécessite de renoncer aux ticks de l'axe.

myplot + theme(axis.ticks.x = element_blank(), axis.ticks.length.x = unit(3.25, "cm")

Je suppose que l'on peut ajouter les marques de coche manuellement avec geom_segment . Une autre possibilité pourrait être [ggalt::annotation_ticks][1] mais je n'ai pas pris la peine d'essayer non plus (notez que la version actuelle de ggalt sur CRAN (0.4) ne supporte pas cette fonction, celle sur github (0.6) le fait).

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