Какой язык форматирования использует ggtext для форматирования текста?
Я пытаюсь отобразить научную нотацию на оси ggplot2 жирным шрифтом в буквальном формате «Ax10 ^ B», а не в формате «AeB», который используется по умолчанию для ggplot2. Когда этот код запускается
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"))
вот результат:

Я использую element_markdown()
from, ggtext
потому что он позволяет переносить жирное начертание, как я обнаружил здесь: Как сделать так, чтобы пользовательские текстовые форматы ggplot2 из функций масштабирования оси соответствовали спецификациям формата, установленным в theme ()?
Я могу исправить двойные кавычки, изменив '\\1'
на \\1
(удалив одинарные кавычки). Но у меня возникают проблемы с отображением знака умножения. Я мог бы просто использовать строчные буквы, x
но это лениво.
Когда я пытаюсь использовать, $\times$
как предлагается здесьhttps://rstudio-pubs-static.s3.amazonaws.com/18858_0c289c260a574ea08c0f10b944abc883.htmlЯ получаю ошибку Виньетка, ggtext
похоже, использует html:https://cran.r-project.org/web/packages/ggtext/vignettes/theme_elements.htmlно они используют <sup>
теги, которые, кажется, противоречат использованию здесь ^
для создания экспоненты, и теги не работают, когда я их использую, и все ресурсы для "знака умножения в html", которые я искал, не дали решения . Итак, мой вопрос: где я могу найти хороший ресурс для изучения правильного языка форматирования, который ggtext
/ ggplot2
использует для меток осей? Также хотел бы знать решение конкретных проблем, которые у меня есть.
Ответы
{ggtext} использует Markdown / HTML. Вы можете вставлять специальные символы, просто используя символы Unicode или используя объекты HTML. Вот тебе наверняка захочется ×
.
Кроме того, не разбирайте строки в выражения при работе с {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", "×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"))
Создано 20.08.2020 пакетом REPEX (v0.3.0)
Вот версия с простыми 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"))
Создано 20.08.2020 пакетом REPEX (v0.3.0)