ggplot geom_text kontrol ukuran font

93

Saya mencoba mengubah font menjadi 10 untuk label plot batang saya ggplot2dengan melakukan sesuatu seperti ini:

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)

tetapi gambar yang dihasilkan memiliki ukuran font yang sangat besar untuk label plot batang.

Kemudian saya berpikir untuk memodifikasinya geom_text()dengan ini:

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

Font label bahkan lebih besar ...

Saya dapat mengubah ukuran di dalam geom_textmenjadi seperti 3 dan sekarang terlihat seperti font 10, mirip dengan label sumbu.

Saya bertanya-tanya apa yang terjadi? Apakah theme(text=element_text(size=10))tidak berlaku untuk label?

Dan mengapa ukuran 10 inci geom_text()berbeda dengan ukuran dalam theme(text=element_text())?

olala
sumber

Jawaban:

141

Berikut beberapa opsi untuk mengubah ukuran teks / label

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)

Di sizedalam geom_textmengubah ukuran geom_textlabel.

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)


Untuk ini Dan mengapa ukuran 10 di geom_text () berbeda dari yang ada di tema (text = element_text ())?

Ya, mereka berbeda. Saya melakukan pemeriksaan manual cepat dan tampaknya rasio ~ (14/5) untuk geom_textukuran dan themeukuran.

Jadi perbaikan yang mengerikan untuk ukuran seragam adalah menskalakan dengan rasio ini

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

Ini tentu saja tidak menjelaskan mengapa? dan itu pita (dan saya berasumsi ada cara yang lebih masuk akal untuk melakukan ini)

pengguna20650
sumber
2
menarik, apa yang Anda periksa untuk mengetahui rasio 14/5?
olala
34
saya melihat. Anda mengingatkan saya pada sesuatu yang saya baca baru-baru ini, saya rasa itu adalah perbedaan dalam unit, default geom_text 5 mungkin 5mm dan unit ukuran tema () adalah titik. 1 poin adalah 1/72 inci = 0.35mm, jadi 1 di geom_text () adalah 1mm, 1 / 0.35 = ~ 14/5 :)
olala
3
Jawaban agstudy menjelaskan mengapa stackoverflow.com/questions/17311917/ggplot2-the-unit-of-size
user20650