olala
olala

Reputation: 4436

ggplot geom_text font size control

I tried to change the font to 10 for the labels of my bar plot in ggplot2 by doing something like this:

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)

but the resulting image has super big font size for the bar plot labels.

Then I thought of modifying in geom_text() with this:

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

The label font is even bigger...

I can change the size within geom_text to something like 3 and now it looks like font 10, similar to the axis labels.

I'm wondering what's going on? Does theme(text=element_text(size=10)) doesn't apply to labels?

And why size of 10 in geom_text() is different from that in theme(text=element_text()) ?

Upvotes: 152

Views: 306879

Answers (4)

Grand
Grand

Reputation: 1

Adding to the accepted answer:

Look up ?.pt and you will understand what 14/5 means and why it is needed.

Upvotes: 0

SarahS
SarahS

Reputation: 401

I had this question, and found on the aesthetic specifications ggplot help page that they add in a handy function for converting mm (default for geom_text for consistency with lines and point) to points (the scale for theme)- you simply put in your font size (in pt), then type /.pt.

So your code would be:

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", size = 10/.pt) +
theme_bw()

This conversion does the equivalent of what Nova mentioned above. Hope this is helpful for anyone looking for this answer in the future.

Upvotes: 22

jakubuilds
jakubuilds

Reputation: 31

Take a look at the relevant entry in ggplot2's customization FAQ: https://ggplot2.tidyverse.org/articles/faq-customising.html#what-is-the-default-size-of-geom_text-and-how-can-i-change-the-font-size-of-geom_text

You can modify the default size of geom_text() by placing update_geom_defaults("text", list(size = X), where X is your choice of new size, at the beginning of your script.

Upvotes: 3

user20650
user20650

Reputation: 25844

Here are a few options for changing text / label sizes

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)

The size in the geom_text changes the size of the geom_text labels.

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)


For this And why size of 10 in geom_text() is different from that in theme(text=element_text()) ?

Yes, they are different. I did a quick manual check and they appear to be in the ratio of ~ (14/5) for geom_text sizes to theme sizes.

So a horrible fix for uniform sizes is to scale by this ratio

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

This of course doesn't explain why? and is a pita (and i assume there is a more sensible way to do this)

Upvotes: 232

Related Questions