Какой язык форматирования использует 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()
из 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
использует для меток оси? Также хотел бы знать решение конкретных проблем, которые у меня есть.
2 ответа
{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)