Como usar símbolos gregos no ggplot2?

101

Minhas categorias precisam ser nomeadas com letras gregas. Estou usando ggplot2e funciona perfeitamente com os dados. Infelizmente, não consigo descobrir como colocar esses símbolos gregos no eixo x (nas marcas) e também como fazê-los aparecer na legenda. Há alguma forma de fazer isso?

ATUALIZAÇÃO: Dei uma olhada no link , entretanto, não há um bom método descrito para realizar o que desejo fazer.

Sam
fonte
4
Veja a discussão da expressionfunção aqui: stackoverflow.com/questions/1395105/getting-latex-into-r-plots
DrewConway
Existe alguma dica sobre como obter o viewportsde um ggplot2. Se isso puder ser feito, acredito que a alteração das marcas de tique-x será direta.
Sam
Você pode usar o latex2exppacote: cran.r-project.org/web/packages/latex2exp/vignettes/…
Enrique Pérez Herrero

Respostas:

152

Aqui está um link para um excelente wiki que explica como colocar símbolos gregos no ggplot2. Em resumo, aqui está o que você faz para obter os símbolos gregos

  1. Etiquetas de texto: use parse = Tdentro de geom_textou annotate.
  2. Rótulos do eixo: Use expression(alpha)para obter o alfa grego.
  3. Rótulos de facetas: use labeller = label_parseddentro facet.
  4. Rótulos de legenda: use bquote(alpha == .(value))em rótulos de legenda.

Você pode ver o uso detalhado dessas opções no link

EDITAR. O objetivo de usar símbolos gregos ao longo das marcas de verificação pode ser alcançado da seguinte forma

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 obter a documentação completa sobre os vários símbolos disponíveis ao fazer isso e como usá-los, consulte ?plotmath.

Ramnath
fonte
Eu quero aqueles símbolos gregos para marcar os tiques. Não tenho certeza se estou seguindo esta resposta. Vou tentar fazer isso e escrever de volta. Obrigado pela direção.
Sam
Isso não funciona para o meu propósito, pelo menos. Obrigado pelo ponteiro.
Sam
@ Sam, verifique o código de exemplo na minha edição. Fornece símbolos gregos ao longo das marcas de escala do eixo x. É isso que você estava procurando?
Ramnath de
8
Eu gostaria de adicionar um asterisco ('*') após uma letra grega. Alguém sabe como fazer isto?
polarizar em
1
Recentemente, aprendi que outra opção é usar substitute, isso também funciona em lugares onde expressionnão funciona, e até permite outra formatação como italics, boldetc.
Sam
40

Solução mais simples: use caracteres Unicode

Nenhum expressionou outros pacotes são necessários.
Não tenho certeza se esse é um recurso mais recente do ggplot, mas funciona. Também torna mais fácil misturar texto grego e normal (como adicionar '*' aos carrapatos)

Basta usar caracteres Unicode na string de texto. parece funcionar bem para todas as opções que consigo imaginar. Editar: anteriormente não funcionava em rótulos de faceta. Isso aparentemente foi corrigido em algum ponto.

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

Criado em 28/08/2019 pelo pacote reprex (v0.3.0)

Matt L.
fonte
4
Boa resposta. Para obter mais informações sobre caracteres Unicode, consulte: stackoverflow.com/questions/27690729/…
PatrickT
muito flexível!!
joaoal
2
Esta é a melhor maneira porque você não se preocupa com os tipos de objetos formados por expressionou bquote- você acaba com um objeto de personagem que pode usar de qualquer outra forma que você use objetos de personagem.
GMSL
1
Este não é apenas o Método mais fácil, mas também o melhor, pois funciona na maioria dos casos e não depende de outras funções.
Squeezie
Isso gera muitos avisos, cerca de cem linhas 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)where 'delta' para letras minúsculas δe 'Delta' para obter capital Δ.

Aqui está uma lista completa de caracteres gregos:

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

EDITAR: Copiado de comentários, ao usar em conjunto com outras palavras, use como:expression(Delta*"price")

Matas Vaitkevicius
fonte
1
Como posso obter uma etiqueta como Δprice? expression(Deltaprice)não funciona, nem funcionaexpression(Delta price)
jf328
2
obrigado. Mas como isso exatamente? xlab(expression(Delta)price)dá um erro
jf328
3
expressão (preço Delta *)
kennyB
Existe uma maneira de obter um Upsilon na forma grega (em oposição à forma latina)? Consulte en.wikipedia.org/wiki/Upsilon Correspondência com Y latino (gostaria de algo como o terceiro caractere em en.wikipedia.org/wiki/Upsilon#/media/… )
Adrian
6
expressão (Delta * "preço") funciona. Não ame a sintaxe.
data de
16

Você não precisa do latex2exppacote para fazer o que deseja. O código a seguir resolverá o problema.

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

insira a descrição da imagem aqui

Além disso, alguns comentários (não respondidos até este ponto) perguntavam sobre colocar um asterisco (*) após uma letra grega. expression(alpha~"*")funciona, então eu sugiro dar uma chance.

Mais comentários perguntaram sobre como conseguir Δ Pricee acho que a maneira mais direta de conseguir isso é expression(Delta~price)). Se precisar adicionar algo antes da letra grega, você também pode fazer o seguinte expression(Indicative~Delta~price):

insira a descrição da imagem aqui

único fantasma
fonte