ggplot geom_text字体大小控件

ola*_*ala 74 r ggplot2

我尝试通过执行以下操作将字体更改为10为我的条形图的标签ggplot2:

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)
Run Code Online (Sandbox Code Playgroud)

但是生成的图像具有超大字体大小的条形图标签.

然后我想到geom_text()用这个修改:

geom_text(size=10,aes(label=V2),position=position_dodge(width=0.9),
                                                   hjust=1.5,colour="white")
Run Code Online (Sandbox Code Playgroud)

标签字体更大......

我可以将内部的大小更改为geom_text3,现在看起来像字体10,类似于轴标签.

我想知道发生了什么事?确实theme(text=element_text(size=10))并不适用于标签?

为什么10英寸的尺寸geom_text()不同于theme(text=element_text())

use*_*650 117

以下是一些用于更改文本/标签大小的选项

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)
Run Code Online (Sandbox Code Playgroud)

sizegeom_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)
Run Code Online (Sandbox Code Playgroud)


为此,为什么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")) 
Run Code Online (Sandbox Code Playgroud)

这当然不能解释为什么?并且是一个皮塔饼(我假设有一种更合理的方式来做到这一点)

  • 我知道了.你让我想起我最近读到的东西,我想这是单位的差异,geom_text默认值为5可能是5mm而theme()大小单位是点.1点是1/72英寸= 0.35mm,所以geom_text()中的1是1mm,1/0.35 = ~14/5 :) (26认同)
  • 对于我们这些想要走另一条路,并将 `geom_text` 转换为“常规”字体大小的人来说,您只需**乘以 0.36。** (3认同)
  • 有趣的是,你检查了什么来找出 14/5 的比例? (2认同)
  • agstudy的答案描述了为什么/sf/ask/1211834221/ (2认同)

小智 13

我有这个问题,并在美学规范 ggplot 帮助页面上发现,他们添加了一个方便的函数,用于将 mm(默认为 geom_text 以与线和点保持一致)转换为点(主题的比例) - 您只需输入字体大小(以 pt 为单位),然后键入 /.pt。

所以你的代码将是:

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", size = 10/.pt) +
theme_bw()
Run Code Online (Sandbox Code Playgroud)

这种转换的作用相当于上面提到的 Nova。希望这对将来寻找此答案的人有所帮助。