ggplot geom_text controle de tamanho de fonte

93

Tentei alterar a fonte para 10 para os rótulos do gráfico de minha barra ggplot2fazendo algo assim:

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)

mas a imagem resultante tem um tamanho de fonte super grande para os rótulos do gráfico de barra.

Então pensei em modificar geom_text()com isto:

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

A fonte do rótulo é ainda maior ...

Posso alterar o tamanho de dentro geom_textpara algo como 3 e agora se parece com a fonte 10, semelhante aos rótulos dos eixos.

Estou me perguntando o que está acontecendo? Não theme(text=element_text(size=10))se aplica a rótulos?

E por que o tamanho de 10 polegadas geom_text()é diferente do tamanho de dentro theme(text=element_text())?

olala
fonte

Respostas:

143

Aqui estão algumas opções para alterar os tamanhos do texto / etiqueta

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)

O sizeem geom_textaltera o tamanho dos geom_textrótulos.

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)


Para isso, E por que o tamanho de 10 em geom_text () é diferente daquele em theme (text = element_text ())?

Sim, eles são diferentes. Fiz uma verificação manual rápida e eles parecem estar na proporção de ~ (14/5) para geom_texttamanhos e themetamanhos.

Portanto, uma solução horrível para tamanhos uniformes é dimensionar por esta proporção

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

Claro que isso não explica por quê? e é pita (presumo que haja uma maneira mais sensata de fazer isso)

user20650
fonte
2
interessante, o que você verificou para descobrir a proporção de 14/5?
olala
36
eu vejo. você me lembra de algo que li recentemente, acho que é a diferença em unidades, o padrão geom_text de 5 pode ser 5 mm e a unidade de tamanho do tema () é o ponto. 1 ponto é 1/72 polegada = 0,35 mm, então 1 em geom_text () é 1 mm, 1 / 0,35 = ~ 14/5 :)
olala
3
A resposta do agstudy descreve por que stackoverflow.com/questions/17311917/ggplot2-the-unit-of-size
user20650 05 de