r - ggplot2中带有特殊字符的左对齐两行文本
问题描述
我尝试了两种方法来尝试在我的图中插入文本,以指定 R² 和 ggplot2 图中的回归斜率。
重要的是首先以 2 作为上标的 R²,我已经保存了它的值和我必须调用的变量中的斜率值,斜率的单位是 nmol/g*h,我想显示为nmol⋅g⁻¹⋅h⁻¹,并且 R² 和斜率应显示在左对齐的两条线上,位于图的左上角。
我尝试了以下方法:
- 使用表达式、粘贴和 unicode:
text <-
expression(paste(
paste(R^2, "=", r_squared, sep = " "),
paste("Slope =", slope, "nmol\u22c5g\u207B\u00B9\u22c5h\u207B\u00B9", sep = " "),
sep = "\n"
))
- 使用 bquote 和 atop:
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,我得到了一个转换错误。在第二种方式中,文本居中而不是左对齐。
我在这里发现了一个类似的问题,但我无法适应它来解决我的问题......
有谁知道在绘图内的两行文本中使用指数和变量的方法,可以左对齐并放置在我喜欢的任何位置?
解决方案
好的,以供参考,以防有人想做类似的事情:
在定义文本时,实际上不需要使用复杂而花哨的表达方式。只需使用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)
推荐阅读
- reactjs - 使用jsPDF保存pdf时如何隐藏按钮OnClick?
- c# - Identity Server Saml2AuthExtensions Idp 发起的 SSO 处理响应
- octave - Octave 中的重做快捷方式是什么?
- javascript - 提交按钮未从部分视图中点击操作方法
- vba - 制表符的文本到列逗号分隔问题
- angular - 带有 JSON 的 Angular 中的动态菜单
- attachment - 如何知道 Corda 事务中的所有附件都已收到
- python-3.x - 如何使用python将字符串日期时间转换为int
- python - 如何从文本文件中检索计数并按最大数排序然后在python上显示
- angular - NgSwitch - 行为出乎意料,`No provider for NgSwitch` - 出现异常