处理 geom_text 大小

Posted

技术标签:

【中文标题】处理 geom_text 大小【英文标题】:Dealing with geom_text size 【发布时间】:2022-01-15 04:47:40 【问题描述】:

我正在使用 ggplot2 geom_tile 构建热图并向每个单元格添加一些文本,如下所示:

我正在使用的代码如下。但是随着热图中图块数量的变化,我需要调整文本大小。有没有办法获得平铺大小并使用它来设置文本大小?还是自动缩放文本?或者甚至构建文本图像并将其缩放为图块上的叠加层?

  text.size.corr  =  0.9
  text.vjust.corr = -0.6
  text.size.misc  =  0.4
  text.vjust.misc =  0.8
  text.lineheight.misc = 0.8
  
  ggheatmap =
    ggplot(res2.flat, 
           aes(column, row, fill=cor)
           )+  
      geom_tile(color = "white") +
      geom_text( aes( column, row, label=cor ),   # add Corr  value
                 color = "black", 
                 size = text.size.corr,
                 vjust= text.vjust.corr
                 ) +
      geom_text( aes( column, row, label=glue("row:column\np=formatPvalue(p)\nn=n") ), # p value
             color = "black", 
             size = text.size.misc,
             vjust= text.vjust.misc,
             lineheight = text.lineheight.misc
             ) +

【问题讨论】:

【参考方案1】:

ggfittext:

library(tidyverse)
library(ggfittext)

data <- tribble(
  ~x, ~y, ~value, ~p, ~n,
  1, 1, 0.78, 0.05, 132,
  1, 2, 0.67, 0.04, 421,
  2, 1, 0.72, 0.01, 400,
  2, 2, 0.23, 0.01, 300
)

data %>%
  ggplot(aes(x, y)) +
  geom_tile(aes(fill = value)) +
  geom_fit_text(aes(label = paste0(p, "\n", n)), size = 1e3)

由reprex package (v2.0.1) 于 2021 年 12 月 10 日创建

【讨论】:

非常感谢。看起来它为每个调用计算了不同的大小,在我看来,这使得结果输出看起来有点业余。但我将深入研究代码,看看我是否能准确地弄清楚它是如何发挥作用的,并可能从中得出一个解决方案。

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

geom_text 在所有方面写入所有数据

在 geom_text 中指定标签的位置

使用美学和 geom_text 时从图例中删除“a”

在堆积条形图中反转 geom_text() (ggplot2)

geom_text - 使按颜色分组的绘图的文本变黑

ggplot:geom_text不应出现在图例中[重复]