【问题标题】:ggplot: size of annotate() vs size of element_text()ggplot:annotate() 的大小与 element_text() 的大小
【发布时间】:2021-03-12 13:08:37
【问题描述】:

我在协调情节中不同元素的大小时遇到​​了一些麻烦。具体来说,我希望注释的大小与 y 轴标题的大小相同。

然而,以下代码会产生不同的大小:

library(ggplot2)
test_data <- data.frame(x = c(1), y = c(1))
ggplot(test_data) +
  geom_point(aes(x = x, y = y)) +
  theme_bw(base_size = 14) +
  annotate("text", label = "A", x = 0.975, y = 1.025, size = unit(14, "pt")) +
  ylab("Why not the same size?") +
  theme(axis.title.y = element_text(size = unit(14, "pt")))

什么给了?

【问题讨论】:

    标签: r ggplot2 font-size


    【解决方案1】:

    annotate 实际上只是创建了一个新的geom_text 层。如果你查看GeomText$draw_panel的源代码你会看到geom_text层中绘制的文本最终是由grid::textGrob绘制的,其字体大小由表达式决定:

    fontsize = data$size * .pt
    

    我们可以看到size 参数被(隐藏的)全局变量.pt 自动放大。如果您在控制台中输入,您可以看到 .pt 的值:

    .pt
    #> [1] 2.845276
    

    由于某种原因,这种缩放不适用于element_text 中的size 参数,尽管element_text 最终也使用grid::textGrob(通过ggplot2:::title_spec)。这可能有一个很好的理由,我只是不知道。

    无论如何,最重要的是,如果您希望 geom_text (或扩展为 annotation("text") )的大小与 element_text 的大小相匹配,您可以将注释的大小除以 @ 987654341@ 或将element_text 的大小乘以.pt

    library(ggplot2)
    
    test_data <- data.frame(x = c(1), y = c(1))
    ggplot(test_data) +
      geom_point(aes(x = x, y = y)) +
      theme_bw(base_size = 14) +
      annotate("text", label = "Now the same size", x = 0.975, y = 1, 
               angle = 90, size = 14/.pt) +
      ylab("Now the same size") +
      theme(axis.title.y = element_text(size = 14))
    

    reprex package (v0.3.0) 于 2020 年 11 月 30 日创建

    【讨论】:

    • 非常感谢!
    猜你喜欢
    • 2012-09-13
    • 2021-02-20
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 2020-04-14
    • 2022-01-24
    • 1970-01-01
    • 2015-08-13
    相关资源
    最近更新 更多