Comment utiliser les symboles grecs dans ggplot2?

101

Mes catégories doivent être nommées avec des lettres grecques. J'utilise ggplot2et cela fonctionne à merveille avec les données. Malheureusement, je ne peux pas comprendre comment mettre ces symboles grecs sur l'axe des x (au niveau des graduations) et les faire également apparaître dans la légende. Y a-t-il un moyen de le faire?

MISE À JOUR: J'ai jeté un coup d'œil sur le lien , cependant, il n'y a pas de bonne méthode décrite pour accomplir ce que je veux faire.

Sam
la source
4
Voir la discussion de la expressionfonction ici: stackoverflow.com/questions/1395105/getting-latex-into-r-plots
DrewConway
Y a-t-il un indice sur l'obtention viewportsdu fichier à partir d'un fichier ggplot2. Si cela peut être fait, je pense que changer les marques x-tic sera simple.
Sam
Vous pouvez utiliser le latex2exppackage: cran.r-project.org/web/packages/latex2exp/vignettes/…
Enrique Pérez Herrero

Réponses:

152

Voici un lien vers un excellent wiki qui explique comment mettre des symboles grecs dans ggplot2. En résumé, voici ce que vous faites pour obtenir des symboles grecs

  1. Étiquettes de texte: à utiliser à l' parse = Tintérieur geom_textou annotate.
  2. Étiquettes de l'axe: à utiliser expression(alpha)pour obtenir l'alpha grec.
  3. Étiquettes de facette: à utiliser à l' labeller = label_parsedintérieur facet.
  4. Étiquettes de légende: à utiliser bquote(alpha == .(value))dans l'étiquette de légende.

Vous pouvez voir l'utilisation détaillée de ces options dans le lien

ÉDITER. L'objectif d'utiliser des symboles grecs le long des graduations peut être atteint comme suit

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

Pour une documentation complète sur les différents symboles disponibles lors de cette opération et sur la manière de les utiliser, reportez-vous à ?plotmath.

Ramnath
la source
Je veux que ces symboles grecs marquent les tics. Je ne suis pas sûr de suivre cette réponse. J'essaierai ceci et vous répondrai. Merci pour la direction.
Sam
Cela ne fonctionne pas du moins pour mon objectif. Merci pour le pointeur cependant.
Sam
@Sam, consultez l'exemple de code dans ma modification. Il vous donne des symboles grecs le long de vos graduations sur l'axe des x. Est ce que c'est ce que vous recherchiez?
Ramnath
8
Je voudrais ajouter un astérisque ('*') après une lettre grecque. Quelqu'un sait-il comment faire ça?
polariser
1
J'ai récemment appris qu'une autre option consiste à utiliser substitute, cela fonctionne également dans les endroits où expressionne fonctionne pas, et permet même d'autres formats comme italics, boldetc.
Sam
40

Solution la plus simple: utiliser des caractères Unicode

Aucun expressionou autre paquet requis.
Je ne sais pas s'il s'agit d'une nouvelle fonctionnalité pour ggplot, mais cela fonctionne. Cela facilite également le mélange de texte grec et normal (comme l'ajout de '*' aux coches)

Utilisez simplement des caractères Unicode dans la chaîne de texte. semble bien fonctionner pour toutes les options auxquelles je peux penser. Edit: auparavant, cela ne fonctionnait pas dans les étiquettes de facettes. Cela a apparemment été corrigé à un moment donné.

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

Créé le 2019-08-28 par le package reprex (v0.3.0)

Matt L.
la source
4
Bonne réponse. Pour en savoir plus sur les caractères Unicode, voir: stackoverflow.com/questions/27690729
...
très souple!!
joaoal
2
C'est la meilleure façon car vous ne vous souciez pas des types d'objets formés par expressionou bquote- vous vous retrouvez avec un objet caractère que vous pouvez utiliser de toute autre manière que vous utilisez des objets caractère.
GMSL
1
Ce n'est pas seulement la méthode la plus simple, mais aussi la meilleure, car elle fonctionne dans la plupart des cas et ne repose pas sur d'autres fonctions.
Squeezie le
Cela génère beaucoup d'avertissements, une centaine de lignes 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

Utilisez expression(delta)où «delta» pour les minuscules δet «Delta» pour obtenir le capital Δ.

Voici la liste complète des caractères grecs:

Α α 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: Copié à partir des commentaires, lors de l'utilisation en conjonction avec d'autres mots, utilisez comme:expression(Delta*"price")

Matas Vaitkevicius
la source
1
Comment puis-je obtenir une étiquette comme Δprice? expression(Deltaprice)ne fonctionne pas, ni ne le faitexpression(Delta price)
jf328
2
Merci. Mais comment est-ce exactement? xlab(expression(Delta)price)donne une erreur
jf328
3
expression (Delta * prix)
kennyB
Existe-t-il un moyen d'obtenir un Upsilon de forme grecque (par opposition à la forme latine)? Voir en.wikipedia.org/wiki/Upsilon Correspondance avec Latin Y (j'aimerais quelque chose comme le troisième caractère dans en.wikipedia.org/wiki/Upsilon#/media/… )
Adrian
6
expression (Delta * "prix") fonctionne. N'aime pas la syntaxe.
daknowles
16

Vous n'avez pas besoin du latex2exppackage pour faire ce que vous vouliez faire. Le code suivant ferait l'affaire.

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

entrez la description de l'image ici

De plus, certains commentaires (sans réponse à ce stade) demandaient de mettre un astérisque (*) après une lettre grecque. expression(alpha~"*")fonctionne, alors je suggère de l'essayer.

Plus de commentaires ont demandé à obtenir Δ Priceet je trouve que le moyen le plus simple d'y parvenir est expression(Delta~price)). Si vous avez besoin d'ajouter quelque chose avant la lettre grecque, vous pouvez également faire ceci: ce expression(Indicative~Delta~price)qui vous donne:

entrez la description de l'image ici

onlyphantom
la source