web-dev-qa-db-fra.com

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

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

Pour l'axe x, étant donné qu'il existe de nombreux points de données, la mise en forme du texte par défaut fait que l'étiquette de chaque graduation se superpose aux autres étiquettes. Comment est-ce que je (a) change la taille de la police de mon texte d'axe et (b) change l'orientation du texte de sorte que le texte soit perpendiculaire à l'axe?

158
Anjan

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

enter image description here

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.

251
Drew Steen

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

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"))
62
metasequoia

En ajoutant aux solutions précédentes, vous pouvez également spécifier la taille de la police relative au base_size inclus dans les thèmes tels que theme_bw() (où base_size est 11) à l'aide du rel() function.

Par exemple:

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

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))
14
meduvigo

Utiliser l'attribut "Remplir" aide dans de tels cas. Vous pouvez supprimer le texte de l'axe à l'aide de element_blank() et afficher un graphique à barres multicolore avec une légende. Je trace une fréquence d'enlèvement 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())

Dans mon cas, j’ai opté pour cette solution car j’avais beaucoup de barres dans le graphique à barres et je n’étais pas en mesure de trouver une taille de police appropriée, lisible et suffisamment petite pour ne pas se chevaucher.

3
user131476

Lors de la création de plusieurs parcelles, il est judicieux de la définir globalement (la partie pertinente est la deuxième ligne, trois lignes ensemble constituent un exemple de travail):

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