首页 > 解决方案 > ggplot2中带有特殊字符的左对齐两行文本

问题描述

我尝试了两种方法来尝试在我的图中插入文本,以指定 R² 和 ggplot2 图中的回归斜率。

重要的是首先以 2 作为上标的 R²,我已经保存了它的值和我必须调用的变量中的斜率值,斜率的单位是 nmol/g*h,我想显示为nmol⋅g⁻¹⋅h⁻¹,并且 R² 和斜率应显示在左对齐的两条线上,位于图的左上角。

我尝试了以下方法:

text <- 
   expression(paste(
      paste(R^2, "=", r_squared, sep = " "), 
      paste("Slope =", slope, "nmol\u22c5g\u207B\u00B9\u22c5h\u207B\u00B9", sep = " "),
      sep = "\n"
   ))
text <- 
   bquote(atop(
     R^2 == .(r_squared_singledata),
     "Reaction rate" == .(slope_singledata)~nmol%.%g^-1%.%h^-1))

在这两种方式中,我都将这些表达式保存在一个变量中并稍后调用:

info_box <- grobTree(textGrob(text, x = 0.01, y = 0.99, 
                                hjust = 0, vjust = 1, gp = gpar(fontsize = 8)))
ggplot(data = mydata, aes(x,y))+
annotation_custom(info_box)

问题是,在第一种方式中,由于 unicodes,我得到了一个转换错误。在第二种方式中,文本居中而不是左对齐。

我在这里发现了一个类似的问题,但我无法适应它来解决我的问题......

有谁知道在绘图内的两行文本中使用指数和变量的方法,可以左对齐并放置在我喜欢的任何位置?

标签: rggplot2

解决方案


好的,以供参考,以防有人想做类似的事情:

在定义文本时,实际上不需要使用复杂而花哨的表达方式。只需使用richtext_grob()gridtext 包中的命令,它可以在字符串中使用 HTML 和 Markdown 命令。

我的解决方案现在看起来像这样:

library(gridtext)

# The <br> causes a line-break, <sup> and </sup> enter and escape superscript
text <- paste(
      paste("R<sup>2</sup> = ", r_squared),
      "<br>",
      paste("Slope = ", slope, " nmol g<sup>-1</sup> h<sup>-1</sup>")
    )

# Use of richtext_grob() instead of textGrob()
info_box <- grobTree(
        richtext_grob(text, x = 0.01, y = 0.99, 
                      hjust = 0, vjust = 1, gp = gpar(fontsize = 8))
        )

ggplot(data = mydata, aes(x,y))+
annotation_custom(info_box)

可以在此处或在CRAN官方网站上找到其他格式化文本的可能性。


推荐阅读