ggplot geom_text Schriftgrößensteuerung

88

Ich habe versucht, die Schriftart für die Beschriftungen meines Balkendiagramms auf 10 zu ändern, ggplot2indem ich Folgendes getan habe:

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)

Das resultierende Bild hat jedoch eine super große Schriftgröße für die Beschriftungen des Balkendiagramms.

Dann dachte ich daran, dies zu ändern geom_text():

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

Die Etikettenschrift ist noch größer ...

Ich kann die Größe innerhalb geom_textauf 3 ändern und jetzt sieht es aus wie Schriftart 10, ähnlich wie bei den Achsenbeschriftungen.

Ich frage mich, was los ist? Gilt theme(text=element_text(size=10))nicht für Etiketten?

Und warum unterscheidet sich die Größe von 10 geom_text()Zoll von der in theme(text=element_text())?

olala
quelle

Antworten:

137

Hier sind einige Optionen zum Ändern der Text- / Etikettengröße

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)

Die sizein der geom_textändert die Größe der geom_textEtiketten.

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)


Dazu Und warum Größe von 10 in geom_text () unterscheidet sich von dem in Thema (text = ELEMENT_TEXT ())?

Ja, sie sind unterschiedlich. Ich habe eine schnelle manuelle Überprüfung durchgeführt und sie scheinen im Verhältnis ~ (14/5) für geom_textGrößen zu themeGrößen zu liegen.

Eine schreckliche Lösung für einheitliche Größen ist es, nach diesem Verhältnis zu skalieren

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

Das erklärt natürlich nicht warum? und ist eine Pita (und ich nehme an, es gibt einen vernünftigeren Weg, dies zu tun)

user20650
quelle
2
Interessant, was haben Sie überprüft, um das 14/5-Verhältnis herauszufinden?
Olala
34
Aha. Sie erinnern mich an etwas, das ich kürzlich gelesen habe. Ich denke, es ist der Unterschied in Einheiten. Der Standardwert für geom_text von 5 ist möglicherweise 5 mm und die Einheit für die Größe von theme () ist point. 1 Punkt ist 1/72 Zoll = 0,35 mm, also ist 1 in geom_text () 1 mm, 1 / 0,35 = ~ 14/5 :)
olala
3
Die Antwort von agstudy beschreibt, warum stackoverflow.com/questions/17311917/ggplot2-the-unit-of-size
user20650