Changer la taille de la police et la direction du texte des axes dans ggplot2


188

Je trace un graphique avec une variable catégorielle sur l'axe des x et une variable numérique sur l'axe des y.

Pour l'axe des x, étant donné qu'il existe de nombreux points de données, la mise en forme du texte par défaut entraîne le chevauchement de l'étiquette de chaque coche avec d'autres étiquettes. Comment puis-je (a) modifier la taille de la police du texte de mon axe et (b) modifier l'orientation du texte afin que le texte soit perpendiculaire à l'axe?



Il y a un chevauchement avec stackoverflow.com/q/1330989/946850 , mais cette question ne couvre pas le redimensionnement du texte.
krlmlr

Réponses:


292

Utilisez theme():

d <- data.frame(x=gl(10, 1, 10, labels=paste("long text label ", letters[1:10])), y=rnorm(10))
ggplot(d, aes(x=x, y=y)) + geom_point() +
    theme(text = element_text(size=20),
        axis.text.x = element_text(angle=90, hjust=1)) 
#vjust adjust the vertical justification of the labels, which is often useful

entrez la description de l'image ici

Il y a beaucoup de bonnes informations sur la façon de formater vos ggplots ici . Vous pouvez voir une liste complète des paramètres que vous pouvez modifier (en gros, tous) à l'aide de ?theme.


2
Je pense que ça devrait l'être hjust=1.
Artem Sokolov

Vrai! Corrigé par le commentaire d'Artem, mais je n'ai pas mis à jour l'image.
Drew Steen

68

Idem @Drew Steen sur l'utilisation de theme(). Voici les attributs de thème courants pour le texte et les titres des axes.

ggplot(mtcars, aes(x = factor(cyl), y = mpg))+
  geom_point()+
  theme(axis.text.x = element_text(color = "grey20", size = 20, angle = 90, hjust = .5, vjust = .5, face = "plain"),
        axis.text.y = element_text(color = "grey20", size = 12, angle = 0, hjust = 1, vjust = 0, face = "plain"),  
        axis.title.x = element_text(color = "grey20", size = 12, angle = 0, hjust = .5, vjust = 0, face = "plain"),
        axis.title.y = element_text(color = "grey20", size = 12, angle = 90, hjust = .5, vjust = .5, face = "plain"))

19

Utilisez le thème ():

d <- data.frame(x=gl(10, 1, 10, labels=paste("long text label ", letters[1:10])), y=rnorm(10))
ggplot(d, aes(x=x, y=y)) + geom_point() +
theme(text = element_text(size=20))

19

En ajoutant aux solutions précédentes, vous pouvez également spécifier la taille de la police par rapport à celle base_sizeincluse dans les thèmes tels que theme_bw()(où base_sizeest 11) à l'aide de la rel()fonction.

Par exemple:

ggplot(mtcars, aes(disp, mpg)) +
  geom_point() +
  theme_bw() +
  theme(axis.text.x=element_text(size=rel(0.5), angle=90))

5

Lorsque vous créez de nombreux tracés, il est logique de le définir globalement (la partie pertinente est la deuxième ligne, trois lignes ensemble sont un exemple de travail):

   library('ggplot2')
   theme_update(text = element_text(size=20))
   ggplot(mpg, aes(displ, hwy, colour = class)) + geom_point()

4

L'utilisation de l'attribut "fill" aide dans des cas comme celui-ci. Vous pouvez supprimer le texte de l'axe en utilisant element_blank()et afficher un graphique à barres multicolore avec une légende. Je trace une fréquence de retrait de pièce dans un atelier de réparation comme ci-dessous

ggplot(data=df_subset,aes(x=Part,y=Removal_Frequency,fill=Part))+geom_bar(stat="identity")+theme(axis.text.x  = element_blank())

J'ai opté pour cette solution dans mon cas car j'avais de nombreuses barres dans le graphique à barres et je n'ai pas été en mesure de trouver une taille de police appropriée qui soit à la fois lisible et suffisamment petite pour ne pas se chevaucher.


0

Une autre façon de traiter les étiquettes qui se chevauchent consiste à utiliser guide = guide_axis(n.dodge = 2).

library(dplyr)
library(tibble)
library(ggplot2)

dt <- mtcars %>% rownames_to_column("name") %>% 
  dplyr::filter(cyl == 4)

# Overlapping labels
ggplot(dt, aes(x = name, y = mpg)) + geom_point()

entrez la description de l'image ici

ggplot(dt, aes(x = name, y = mpg)) + geom_point() +
  scale_x_discrete(guide = guide_axis(n.dodge = 2))

entrez la description de l'image ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.