ggplot geom_text 字体大小控制

Posted

技术标签:

【中文标题】ggplot geom_text 字体大小控制【英文标题】:ggplot geom_text font size control 【发布时间】:2014-09-23 13:41:40 【问题描述】:

我尝试通过执行以下操作将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)) 是否不适用于标签?

为什么geom_text() 中的10 与theme(text=element_text()) 中的不同?

【问题讨论】:

【参考方案1】:

这里有一些更改文本/标签大小的选项

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)

geom_text 中的size 更改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()) 中的大小不同?

是的,它们是不同的。我做了一个快速的手动检查,它们似乎在geom_text 尺寸与theme 尺寸的比率为 ~ (14/5)。

所以统一尺寸的一个可怕的解决办法是按这个比例缩放

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

这当然不能解释为什么?而且是皮塔饼(我认为有更明智的方法来做到这一点)

【讨论】:

有趣,你检查了什么来找出 14/5 的比例? 我明白了。你让我想起了我最近读到的东西,我猜这是单位的差异,geom_text 默认的 5 可能是 5mm,而 theme() 大小单位是点。 1 点是 1/72 英寸=0.35mm,所以 geom_text() 中的 1 是 1mm,1/0.35 =~ 14/5 :) agstudy 的回答描述了为什么***.com/questions/17311917/ggplot2-the-unit-of-size 对于我们这些想要另辟蹊径并将geom_text 转换为“常规”字体大小的人,您只需乘以0.36。

以上是关于ggplot geom_text 字体大小控制的主要内容,如果未能解决你的问题,请参考以下文章

R语言ggplot2可视化柱状图添加数值说明并控制文本数值字体大小轴标签字体大小实战

R语言ggplot2可视化改变字体大小实战:单个图片设置字体大小全局设置字体大小

增加图例字体大小ggplot2

ggplot2中的字体大小混乱

R可视化包ggplot2修改可视化图像的字体大小

R语言可视化包ggplot2改变图例(legend)元素的大小实战:包含图例中标题字体文本字体标识模块(key)的大小