I am trying to display scientific notation on a ggplot2 axis in boldface, with the literal "Ax10^B" format, not "AeB" format that is the default of ggplot2. When this code is run
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"))
I use element_markdown()
from ggtext
because it allows the bold face to be transferred as I discovered here: How do I make ggplot2 custom text formats from axis scale functions follow format specifications set in theme()?
I can fix the double quotes by changing '\\1'
to \\1
(deleting the single quotes). But I am having trouble getting the multiplication sign to display. I could just use a lowercase x
but that is lazy.
When I try to use $\times$
as suggested here 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 but they use <sup>
tags which seems to go against the use of ^
to make an exponenent here, and the tags don't work when I use them, and all resources for "multiplication sign in html" that I searched for haven't yielded a solution. So my question is: Where can I find a good resource to learn the proper formatting language that ggtext
/ ggplot2
uses for axis tick labels? Would also like to know the solution to the specific problems I'm having.
{ggtext} uses Markdown/HTML. You can insert special characters either by just using unicode characters or by using HTML entities. Here, you probably want ×
.
Also, don't parse strings into expressions when working with {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"))
Created on 2020-08-20 by the reprex package (v0.3.0)