Bahasa pemformatan apa yang digunakan ggtext untuk memformat teks?
Saya mencoba menampilkan notasi ilmiah pada sumbu ggplot2 dengan huruf tebal, dengan format "Ax10 ^ B" literal, bukan format "AeB" yang merupakan default dari ggplot2. Saat kode ini dijalankan
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"))
ini hasilnya:

Saya menggunakan element_markdown()
from ggtext
karena memungkinkan wajah tebal untuk ditransfer seperti yang saya temukan di sini: Bagaimana cara membuat format teks kustom ggplot2 dari fungsi skala sumbu mengikuti spesifikasi format yang ditetapkan dalam theme ()?
Saya bisa memperbaiki tanda kutip ganda dengan mengubah '\\1'
ke \\1
(menghapus tanda kutip tunggal). Tapi saya kesulitan menampilkan tanda perkalian. Saya bisa saja menggunakan huruf kecil x
tapi itu malas.
Ketika saya mencoba menggunakan $\times$
seperti yang disarankan di sinihttps://rstudio-pubs-static.s3.amazonaws.com/18858_0c289c260a574ea08c0f10b944abc883.htmlSaya mendapatkan kesalahan. Vinyet untuk ggtext
sepertinya menggunakan html:https://cran.r-project.org/web/packages/ggtext/vignettes/theme_elements.htmltetapi mereka menggunakan <sup>
tag yang tampaknya bertentangan dengan penggunaan ^
untuk membuat eksponen di sini, dan tag tidak berfungsi saat saya menggunakannya, dan semua sumber daya untuk "perkalian masuk html" yang saya telusuri belum menghasilkan solusi . Jadi pertanyaan saya adalah: Di mana saya dapat menemukan sumber yang baik untuk mempelajari bahasa pemformatan yang tepat yang ggtext
/ ggplot2
digunakan untuk label centang sumbu? Saya juga ingin mengetahui solusi untuk masalah spesifik yang saya alami.
Jawaban
{ggtext} menggunakan Markdown / HTML. Anda dapat memasukkan karakter khusus baik dengan hanya menggunakan karakter unicode atau dengan menggunakan entitas HTML. Di sini, Anda mungkin ingin ×
.
Selain itu, jangan mengurai string menjadi ekspresi saat bekerja dengan {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"))
Dibuat pada 2020-08-20 oleh paket reprex (v0.3.0)
Ini adalah versi hanya dengan plotmath
ekspresi:
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"))
... dan ini adalah versi dengan 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"))
Dibuat pada 2020-08-20 oleh paket reprex (v0.3.0)