ggplot контроль размера шрифта geom_text

93

Я попытался изменить шрифт на 10 для меток моего столбчатого графика ggplot2, сделав что-то вроде этого:

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)

но получившееся изображение имеет очень большой размер шрифта для подписей столбцов.

Затем я подумал о том, чтобы изменить geom_text()это:

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

Шрифт метки еще больше ...

Я могу изменить размер geom_textна что-то вроде 3, и теперь он выглядит как шрифт 10, похожий на метки оси.

Мне интересно, что происходит? Не theme(text=element_text(size=10))относится к этикеткам?

И почему размер 10 geom_text()дюймов отличается от размера дюйма theme(text=element_text())?

о Ла ла
источник

Ответы:

141

Вот несколько вариантов изменения размеров текста / этикеток

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)

sizeВ geom_textизменяет размер geom_textэтикетки.

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)


Для этого И почему размер 10 в geom_text () отличается от такового в theme (text = element_text ())?

Да они разные. Я провел быструю ручную проверку, и оказалось, что соотношение geom_textразмеров к размеру составляет ~ (14/5) theme.

Таким образом, ужасное решение для однородных размеров - масштабирование с учетом этого соотношения.

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

Это, конечно, не объясняет, почему? и это лаваш (и я предполагаю, что есть более разумный способ сделать это)

user20650
источник
2
интересно, что вы проверяли, чтобы узнать соотношение 14/5?
olala
34
Понимаю. вы напоминаете мне кое-что, что я недавно прочитал, я думаю, это разница в единицах измерения, geom_text по умолчанию 5 может быть 5 мм, а единица размера theme () - точка. 1 пункт равен 1/72 дюйма = 0,35 мм, поэтому 1 в geom_text () составляет 1 мм, 1 / 0,35 = ~ 14/5 :)
olala
3
Ответ agstudy описывает, почему stackoverflow.com/questions/17311917/ggplot2-the-unit-of-size
user20650 05