aelwan aelwan - 2 months ago 11
R Question

Subscripts and superscripts "-" or "+" with ggplot2 axis labels? (ionic chemical notation)

In my plot, I want the label of x axis to be (Production rate μmoles NO3-N Kg-1). However, I want the NO3 to have negative sign"-" as superscript like below

enter image description here

I used the code below

x <- seq(0,2*pi,0.1)
y <- sin(x)
enter code here
df <- data.frame(x, y)
ggplot(df, aes(x=x, y=y))+
geom_point(size=4)+
labs(x=expression(Production~rate~" "~mu~moles~NO[3]^{-1}-N~Kg^{-1}),
y=expression(Concentration~mg~L^{-1})) +
theme(legend.title = element_text(size=12, face="bold"),
legend.text=element_text(size=12),
axis.text=element_text(size=12),
axis.title = element_text(color="black", face="bold", size=18))


In the label of x axis, I couldn't use negative sign only as a superscript to NO3 so I had to use -1 as shown below

enter image description here

Any suggestions on how to change the label to have a negative sign only without 1?

42- 42-
Answer

Try quoting the minus sign:

ggplot(df, aes(x=x, y=y))+
geom_point(size=4)+
labs(x=expression(Production~rate~" "~mu~moles~NO[3]^{"-"}-N~Kg^{-1}),
     y=expression(Concentration~mg~L^{-1})) +
theme(legend.title = element_text(size=12, face="bold"),
      legend.text=element_text(size=12),
      axis.text=element_text(size=12),
      axis.title = element_text(color="black", face="bold", size=18))

I think it looks more scientifically accurate to use the %.% operator between units:

+ labs(x=expression(Production~rate~" "~mu~moles~NO[3]^{textstyle("-")}-N %.% Kg^{-1}),
     y=expression(Concentration~mg~L^{-1})) +

textstyle should keep the superscript-ed text from being reduced in size. I'm also not sure why you have a " " between two tildes. You can string a whole bunch of tildes together to increase "spaces":

ggplot(df, aes(x=x, y=y))+
geom_point(size=4)+
labs(x=expression(Production~rate~~~~~~~~~~~~mu~moles~NO[3]^{textstyle("-")}-N %.% Kg^{-1}),
     y=expression(Concentration~mg~L^{-1})) +
theme(legend.title = element_text(size=12, face="bold"),
      legend.text=element_text(size=12),
      axis.text=element_text(size=12),
      axis.title = element_text(color="black", face="bold", size=18))

enter image description here

Comments