Tuesday, 8 August 2017

r - 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()) ?


Answer



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)


No comments:

Post a Comment

casting - Why wasn&#39;t Tobey Maguire in The Amazing Spider-Man? - Movies &amp; TV

In the Spider-Man franchise, Tobey Maguire is an outstanding performer as a Spider-Man and also reprised his role in the sequels Spider-Man...