контроль розміру шрифту 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()дюймів відрізняється від розміру 10 дюймів 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 () відрізняється від розміру у темі (text = element_text ())?

Так, вони різні. Я швидко зробив ручну перевірку, і, здається, вони мають співвідношення ~ (14/5) для geom_textрозмірів до 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")) 

Звичайно, це не пояснює чому? і є лавашем (і я припускаю, що це є більш розумний спосіб зробити це)


2
цікаво, що ви перевірили, щоб з’ясувати співвідношення 14/5?
olala

34
розумію. ви нагадуєте мені те, що я нещодавно читав, я думаю, це різниця в одиницях, за замовчуванням geom_text 5 може бути 5 мм, а одиниця розміру теми () - точка. 1 бал дорівнює 1/72 дюйма = 0,35 мм, отже 1 у geom_text () дорівнює 1 мм, 1 / 0,35 = ~ 14/5 :)
олала

3
Відповідь agstudy описує , чому stackoverflow.com/questions/17311917/ggplot2-the-unit-of-size
user20650
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.