¿Cómo usar símbolos griegos en ggplot2?

101

Mis categorías deben nombrarse con letras griegas. Estoy usando ggplot2y funciona muy bien con los datos. Desafortunadamente, no puedo entender cómo poner esos símbolos griegos en el eje x (en las marcas de verificación) y también hacer que aparezcan en la leyenda. ¿Hay alguna forma de hacerlo?

ACTUALIZACIÓN: Eché un vistazo al enlace , sin embargo, no hay un buen método descrito para lograr lo que quiero hacer.

Sam
fuente
4
Vea la discusión de la expressionfunción aquí: stackoverflow.com/questions/1395105/getting-latex-into-r-plots
DrewConway
¿Hay alguna pista sobre viewportscómo obtener el de un ggplot2. Si eso se puede hacer, creo que cambiar las marcas x-tic será sencillo.
Sam
Puede usar el latex2exppaquete: cran.r-project.org/web/packages/latex2exp/vignettes/…
Enrique Pérez Herrero

Respuestas:

152

Aquí hay un enlace a una excelente wiki que explica cómo poner símbolos griegos en ggplot2. En resumen, esto es lo que debe hacer para obtener símbolos griegos.

  1. Etiquetas de texto: use parse = Tdentro geom_texto annotate.
  2. Etiquetas de eje: se utilizan expression(alpha)para obtener alfa griego.
  3. Etiquetas de facetas: utilizar en el labeller = label_parsedinterior facet.
  4. Etiquetas de leyenda: Úselo bquote(alpha == .(value))en la etiqueta de leyenda.

Puede ver el uso detallado de estas opciones en el enlace

EDITAR. El objetivo de utilizar símbolos griegos a lo largo de las marcas de verificación se puede lograr de la siguiente manera

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);

Para obtener documentación completa sobre los diversos símbolos que están disponibles al hacer esto y cómo usarlos, consulte ?plotmath.

Ramnath
fuente
Quiero que esos símbolos griegos marquen los tics. No estoy seguro de seguir esta respuesta. Intentaré esto y responderé. Gracias por la dirección.
Sam
Esto no funciona para mi propósito al menos. Sin embargo, gracias por el puntero.
Sam
@Sam, mira el código de ejemplo en mi edición. Le da símbolos griegos a lo largo de las marcas de graduación del eje x. Esto es lo que estabas buscando?
Ramnath
8
Me gustaría agregar un asterisco ('*') después de una letra griega. Alguien sabe cómo hacer esto?
polarizar el
1
Recientemente aprendí que otra opción es usar substitute, esto también funciona en lugares donde expressionno funciona, e incluso permite otros formatos como italics, boldetc.
Sam
40

La solución más sencilla: utilice caracteres Unicode

No se expressionnecesitan otros paquetes.
No estoy seguro si esta es una característica más nueva para ggplot, pero funciona. También facilita la mezcla de texto griego y normal (como agregar '*' a las marcas)

Simplemente use caracteres Unicode dentro de la cadena de texto. parece funcionar bien para todas las opciones que se me ocurren. Editar: anteriormente no funcionaba en etiquetas de facetas. Esto aparentemente se ha solucionado en algún momento.

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"))

Creado el 2019-08-28 por el paquete reprex (v0.3.0)

Matt L.
fuente
4
Buena respuesta. Para obtener más información sobre los caracteres Unicode, consulte: stackoverflow.com/questions/27690729/…
PatrickT
¡¡muy flexible!!
Joaoal
2
Ésta es la mejor manera porque no te preocupas por los tipos de objetos formados por expressiono bquote- terminas con un objeto de personaje que puedes usar de cualquier otra forma en que uses objetos de personaje.
GMSL
1
Este no solo es el método más fácil, sino también el mejor, ya que funciona en la mayoría de los casos y no depende de otras funciones.
Squeezie
Esto genera muchas advertencias, alrededor de un centenar de líneas de: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>
Patafikss
37

Use expression(delta)donde 'delta' para minúsculas δy 'Delta' para obtener capitalΔ .

Aquí está la lista completa de caracteres griegos:

Α α alfa
Β β beta
Γ γ gamma
Δ δ delta
Ε ε épsilon
Ζ ζ zeta
Η η eta
Θ θ theta
Ι ι iota
Κ κ kappa
Λ λ lambda
Μ μ mu
Ν ν nu
Ξ ξ xi
Ο ο omicron
Π π pi
Ρ ρ rho
Σ σ sigma
Τ τ tau
Υ υ upsilon
Φ φ phi
Χ χ chi
Ψ ψ psi
Ω ω omega

EDITAR: Copiado de comentarios, cuando se usa junto con otras palabras, use como:expression(Delta*"price")

Matas Vaitkevicius
fuente
1
¿Cómo puedo obtener una etiqueta como Δprice? expression(Deltaprice)no funciona, ni tampocoexpression(Delta price)
jf328
2
Gracias. ¿Pero cómo es eso exactamente? xlab(expression(Delta)price)da un error
jf328
3
expresión (Delta * precio)
kennyB
¿Hay alguna manera de obtener una forma griega (en oposición a la forma latina) Upsilon? Ver en.wikipedia.org/wiki/Upsilon Correspondencia con Y latina (me gustaría algo como el tercer carácter en en.wikipedia.org/wiki/Upsilon#/media/… )
Adrian
6
La expresión (Delta * "precio") funciona. No amo la sintaxis.
daknowles
16

No necesita el latex2exppaquete para hacer lo que quería hacer. El siguiente código funcionaría.

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))

ingrese la descripción de la imagen aquí

Además, algunos comentarios (sin respuesta a este punto) preguntaron acerca de poner un asterisco (*) después de una letra griega. expression(alpha~"*")funciona, así que sugiero darle una oportunidad.

Más comentarios preguntaron sobre cómo conseguirlo Δ Pricey creo que la forma más sencilla de conseguirlo es expression(Delta~price)). Si necesita agregar algo antes de la letra griega, también puede hacer esto: lo expression(Indicative~Delta~price)que le da:

ingrese la descripción de la imagen aquí

solo fantasma
fuente