contrôle de la taille de la police ggplot geom_text

93

J'ai essayé de changer la police en 10 pour les étiquettes de mon diagramme à barres en ggplot2faisant quelque chose comme ceci:

ggplot(data=file,aes(x=V1,y=V3,fill=V2)) +
    geom_bar(stat="identity",position="dodge",colour="white") + 
    geom_text(aes(label=V2),position=position_dodge(width=0.9),
                                                 hjust=1.5,colour="white") +
    theme_bw()+theme(element_text(size=10))

ggsave(filename="barplot.pdf",width=4,height=4)

mais l'image résultante a une taille de police très grande pour les étiquettes de graphique à barres.

Ensuite, j'ai pensé à modifier geom_text()avec ceci:

geom_text(size=10,aes(label=V2),position=position_dodge(width=0.9),
                                                   hjust=1.5,colour="white")

La police de l'étiquette est encore plus grande ...

Je peux changer la taille geom_texten quelque chose comme 3 et maintenant cela ressemble à la police 10, similaire aux étiquettes des axes.

Je me demande ce qui se passe? Cela theme(text=element_text(size=10))ne s'applique pas aux étiquettes?

Et pourquoi la taille de 10 pouces geom_text()est différente de celle de theme(text=element_text())?

Olala
la source

Réponses:

141

Voici quelques options pour modifier la taille du texte / des étiquettes

library(ggplot2)

# Example data using mtcars

a <- aggregate(mpg ~ vs + am , mtcars, function(i) round(mean(i)))

p <- ggplot(mtcars, aes(factor(vs), y=mpg, fill=factor(am))) + 
            geom_bar(stat="identity",position="dodge") + 
            geom_text(data = a, aes(label = mpg), 
                            position = position_dodge(width=0.9),  size=20)

Le sizedans le geom_textmodifie la taille des geom_textétiquettes.

p <- p + theme(axis.text = element_text(size = 15)) # changes axis labels

p <- p + theme(axis.title = element_text(size = 25)) # change axis titles

p <- p + theme(text = element_text(size = 10)) # this will change all text size 
                                                             # (except geom_text)


Pour cela Et pourquoi la taille de 10 dans geom_text () est différente de celle dans theme (text = element_text ())?

Oui, ils sont différents. J'ai fait une vérification manuelle rapide et ils semblent être dans le rapport de ~ (14/5) pour les geom_texttailles aux themetailles.

Donc, une solution horrible pour les tailles uniformes est de mettre à l'échelle par ce rapport

geom.text.size = 7
theme.size = (14/5) * geom.text.size

ggplot(mtcars, aes(factor(vs), y=mpg, fill=factor(am))) + 
  geom_bar(stat="identity",position="dodge") + 
  geom_text(data = a, aes(label = mpg), 
            position = position_dodge(width=0.9),  size=geom.text.size) + 
  theme(axis.text = element_text(size = theme.size, colour="black")) 

Cela n'explique bien sûr pas pourquoi? et c'est un pita (et je suppose qu'il y a une façon plus sensée de le faire)

user20650
la source
2
intéressant, qu'avez-vous vérifié pour connaître le ratio 14/5?
olala
34
je vois. vous me rappelez quelque chose que j'ai lu récemment, je suppose que c'est la différence d'unités, la valeur par défaut de geom_text de 5 pourrait être de 5 mm et l'unité de taille du thème () est le point. 1 point correspond à 1/72 pouce = 0,35 mm, donc 1 dans geom_text () est 1 mm, 1 / 0,35 = ~ 14/5 :)
olala
3
La réponse d'agstudy décrit pourquoi stackoverflow.com/questions/17311917/ggplot2-the-unit-of-size
user20650