My categories need to be named with Greek letters. I am using ggplot2
, and it works beautifully with the data. Unfortunately I cannot figure out how to put those greek symbols on the x axis (at the tick marks) and also make them appear in the legend. Is there any way to do it?
UPDATE: I had a look at the link, however, there is no good method described to accomplish what I want to do.
expression
function here: stackoverflow.com/questions/1395105/getting-latex-into-r-plots
viewports
from a ggplot2. If that can be done, I believe that changing x-tic marks will be straight forward.
latex2exp
package: cran.r-project.org/web/packages/latex2exp/vignettes/…
Here is a link to an excellent wiki that explains how to put greek symbols in ggplot2. In summary, here is what you do to obtain greek symbols
Text Labels: Use parse = T inside geom_text or annotate. Axis Labels: Use expression(alpha) to get greek alpha. Facet Labels: Use labeller = label_parsed inside facet. Legend Labels: Use bquote(alpha == .(value)) in legend label.
You can see detailed usage of these options in the link
EDIT. The objective of using greek symbols along the tick marks can be achieved as follows
require(ggplot2);
data(tips);
p0 = qplot(sex, data = tips, geom = 'bar');
p1 = p0 + scale_x_discrete(labels = c('Female' = expression(alpha),
'Male' = expression(beta)));
print(p1);
For complete documentation on the various symbols that are available when doing this and how to use them, see ?plotmath
.
Simplest solution: Use Unicode Characters
No expression
or other packages needed.
Not sure if this is a newer feature for ggplot, but it works. It also makes it easy to mix Greek and regular text (like adding '*' to the ticks)
Just use unicode characters within the text string. seems to work well for all options I can think of. Edit: previously it did not work in facet labels. This has apparently been fixed at some point.
library(ggplot2)
ggplot(mtcars,
aes(mpg, disp, color=factor(gear))) +
geom_point() +
labs(title="Title (\u03b1 \u03a9)", # works fine
x= "\u03b1 \u03a9 x-axis title", # works fine
y= "\u03b1 \u03a9 y-axis title", # works fine
color="\u03b1 \u03a9 Groups:") + # works fine
scale_x_continuous(breaks = seq(10, 35, 5),
labels = paste0(seq(10, 35, 5), "\u03a9*")) + # works fine; to label the ticks
ggrepel::geom_text_repel(aes(label = paste(rownames(mtcars), "\u03a9*")), size =3) + # works fine
facet_grid(~paste0(gear, " Gears \u03a9"))
https://i.imgur.com/5feSM91.png
Created on 2019-08-28 by the reprex package (v0.3.0)
expression
or bquote
- you end up with a character object that you can use in any other way you use character objects.
Warning message in grid.Call(C_textBounds, as.graphicsAnnot(x$label), x$x, x$y, : “conversion failure on '>3σ' in 'mbcsToSbcs': dot substituted for <cf>
Use expression(delta)
where 'delta' for lowercase δ
and 'Delta' to get capital Δ
.
Here's full list of Greek characters:
Α α alpha Β β beta Γ γ gamma Δ δ delta Ε ε epsilon Ζ ζ zeta Η η eta Θ θ theta Ι ι iota Κ κ kappa Λ λ lambda Μ μ mu Ν ν nu Ξ ξ xi Ο ο omicron Π π pi Ρ ρ rho Σ σ sigma Τ τ tau Υ υ upsilon Φ φ phi Χ χ chi Ψ ψ psi Ω ω omega
EDIT: Copied from comments, when using in conjunction with other words use like: expression(Delta*"price")
Δprice
? expression(Deltaprice)
doesn't work, neither does expression(Delta price)
xlab(expression(Delta)price)
gives an error
You do not need the latex2exp
package to do what you wanted to do. The following code would do the trick.
ggplot(smr, aes(Fuel.Rate, Eng.Speed.Ave., color=Eng.Speed.Max.)) +
geom_point() +
labs(title=expression("Fuel Efficiency"~(alpha*Omega)),
color=expression(alpha*Omega), x=expression(Delta~price))
https://i.stack.imgur.com/e9Psf.png
Also, some comments (unanswered as of this point) asked about putting an asterisk (*) after a Greek letter. expression(alpha~"*")
works, so I suggest giving it a try.
More comments asked about getting Δ Price
and I find the most straightforward way to achieve that is expression(Delta~price))
. If you need to add something before the Greek letter, you can also do this: expression(Indicative~Delta~price)
which gets you:
https://i.stack.imgur.com/nJUZy.png
Success story sharing
substitute
, this also works in places whereexpression
does not work, and even allows other formatting likeitalics
,bold
etc.