ggplot geom_text kontrolka rozmiaru czcionki

93

Próbowałem zmienić czcionkę na 10 dla etykiet mojego paska ggplot2, robiąc coś takiego:

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)

ale wynikowy obraz ma bardzo duży rozmiar czcionki dla etykiet wykresów słupkowych.

Potem pomyślałem o modyfikacji w geom_text()tym:

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

Czcionka etykiety jest jeszcze większa ...

Mogę zmienić rozmiar geom_textna około 3 i teraz wygląda to jak czcionka 10, podobnie jak etykiety osi.

Zastanawiam się, co się dzieje? Nie theme(text=element_text(size=10))dotyczy etykiet?

I dlaczego rozmiar 10 geom_text()cali różni się od tego w theme(text=element_text())?

olala
źródło

Odpowiedzi:

141

Oto kilka opcji zmiany rozmiaru tekstu / etykiet

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)

sizeW geom_textzmianę wielkości geom_textetykiet.

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)


Do tego A dlaczego rozmiar 10 w geom_text () różni się od tego w motywie (text = element_text ())?

Tak, są różne. Zrobiłem szybką ręczną kontrolę i wydaje się, że są one w stosunku ~ (14/5) dla geom_textrozmiarów do themerozmiarów.

Tak więc strasznym rozwiązaniem dla jednolitych rozmiarów jest skalowanie według tego współczynnika

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

To oczywiście nie wyjaśnia, dlaczego? i jest pita (i zakładam, że istnieje rozsądniejszy sposób na zrobienie tego)

user20650
źródło
2
ciekawe, co sprawdziłeś, żeby poznać stosunek 14/5?
olala
34
Widzę. przypominasz mi coś, co ostatnio czytałem, wydaje mi się, że to różnica w jednostkach, domyślna wartość geom_text wynosząca 5 może wynosić 5 mm, a jednostka rozmiaru tematu () to punkt. 1 punkt to 1/72 cala = 0,35 mm, więc 1 w geom_text () to 1 mm, 1 / 0,35 = ~
14/5
3
Odpowiedź agstudy opisuje, dlaczego stackoverflow.com/questions/17311917/ggplot2-the-unit-of-size
user20650