ggtext 使用什么格式化语言来格式化文本?

What formatting language does ggtext use to format text?

我正在尝试在 ggplot2 轴上以粗体显示科学记数法,使用文字“Ax10^B”格式,而不是 ggplot2 默认的“AeB”格式。当此代码为运行

library(tidyverse)
library(ggtext)
ggplot(mpg, aes(displ, hwy*10^9)) + geom_point()


#makes the scientific notation using "AeB" explicitly write out Ax10^B
fancy_scientific <- function(l) {
  # turn in to character string in scientific notation
  l <- format(l, scientific = TRUE)
  # quote the part before the exponent to keep all the digits
  l <- gsub("^(.*)e", "'\1'e", l)
  # turn the 'e+' into plotmath format
  l <- gsub("e", "%*%10^", l)
  # return this as an expression
  parse(text=l)
}


ggplot(mpg, aes(displ, hwy*10^9)) + 
  theme_classic() +
  geom_point() + 
  scale_y_continuous(labels= fancy_scientific)  +
  theme(text = element_text(face = "bold"), 
        axis.text.y = element_markdown(face = "bold")) 


这是结果:

我使用 ggtext 中的 element_markdown(),因为它允许转换粗体字,正如我在此处发现的那样:How do I make ggplot2 custom text formats from axis scale functions follow format specifications set in theme()?

我可以通过将 '\1' 更改为 \1(删除单引号)来修复双引号。但是我无法显示乘号。我可以只使用小写字母 x 但那太懒了。

当我尝试按照此处的建议使用 $\times$https://rstudio-pubs-static.s3.amazonaws.com/18858_0c289c260a574ea08c0f10b944abc883.html I get an error. A vignette for ggtext seems to use html: https://cran.r-project.org/web/packages/ggtext/vignettes/theme_elements.html 但他们使用 <sup> 标签,这似乎与使用 ^ 在这里生成指数相反,当我使用这些标签时它们不起作用,我搜索的所有“乘法登录 html”资源都没有找到解决方案。所以我的问题是:我在哪里可以找到一个很好的资源来学习 ggtext/ ggplot2 用于轴刻度标签的正确格式化语言?也想知道我遇到的具体问题的解决方案。

这是一个只有 plotmath 个表达式的版本:

library(dplyr)
library(ggplot2)

fancy_scientific <- function(l) {
    l <- format(l, scientific = TRUE)
    parse(text=gsub("(.*)e(\+?)(\-?[0-9]+)", 
        "bold('\1') * bold(' * ') * bold('10')^bold('\3')", l))
}

mpg %>% dplyr::mutate(hwy = hwy * 1e9) %>% 
    ggplot(aes(displ, hwy)) + 
    theme_classic() +
    geom_point() + 
    scale_y_continuous(labels= fancy_scientific) +
    theme(text = element_text(face = "bold"))

...这里是 ggtext:

的版本
library(dplyr)
library(ggplot2)
library(ggtext)

fancy_scientific <- function(l) {
    l <- format(l, scientific = TRUE)
    parse(text=gsub("(.*)e(\+?)(\-?[0-9]+)", "\1 * 10^(\3)", l))

    ## this would also work, instead of the line above:
    # gsub("(.*)e(\+?)(\-?[0-9]+)", "**\1 \* 10<sup>\3</sup>**", l)
}

mpg %>% dplyr::mutate(hwy = hwy * 1e9) %>% 
    ggplot(aes(displ, hwy)) + 
    theme_classic() +
    geom_point() + 
    scale_y_continuous(labels= fancy_scientific)  +
    theme(text = element_text(face = "bold"), 
          axis.text.y = element_markdown(face = "bold"))

reprex package (v0.3.0)

于 2020 年 8 月 20 日创建

{ggtext} 使用 Markdown/HTML。您可以仅使用 unicode 字符或使用 HTML 实体来插入特殊字符。在这里,你可能想要 &times;.

此外,在使用 {ggtext} 时不要将字符串解析为表达式。

library(tidyverse)
library(ggtext)

#makes the scientific notation using "AeB" explicitly write out Ax10^B
fancy_scientific <- function(l) {
  # turn in to character string in scientific notation
  l <- format(l, scientific = TRUE)
  # quote the part before the exponent to keep all the digits
  l <- gsub("^(.*)e", "\1e", l)
  # turn the 'e+' into plotmath format
  l <- gsub("e", "&times;10^", l)
  # return this as a string
  l
}


ggplot(mpg, aes(displ, hwy*10^9)) + 
  theme_classic() +
  geom_point() + 
  scale_y_continuous(labels= fancy_scientific)  +
  theme(text = element_text(face = "bold"), 
        axis.text.y = element_markdown(face = "bold")) 

reprex package (v0.3.0)

于 2020-08-20 创建