1. ホーム
  2. r

[解決済み] ggplot geom_text のフォントサイズ制御

2022-08-30 12:57:28

質問

の棒グラフのラベルのフォントを10に変更しようとしました。 ggplot2 の棒グラフのラベルのフォントを10に変更しようとしたのですが、このようなことをして

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()) ?

どのように解決するのですか?

テキスト/ラベルのサイズを変更するためのオプションをいくつか紹介します。

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)



この場合 また、geom_text() の 10 のサイズが theme(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")) 

もちろん、これでは なぜなのか? を説明することができず、面倒です(もっと賢明な方法があると思います)。