Come usare i simboli greci in ggplot2?


101

Le mie categorie devono essere denominate con lettere greche. Sto usando ggplot2e funziona magnificamente con i dati. Purtroppo non riesco a capire come mettere quei simboli greci sull'asse x (presso i segni di graduazione) e farli apparire anche nella legenda. C'è modo di farlo?

AGGIORNAMENTO: Ho dato un'occhiata al collegamento , tuttavia, non esiste un buon metodo descritto per realizzare ciò che voglio fare.


4
Vedere la discussione sulla expressionfunzione di qui: stackoverflow.com/questions/1395105/getting-latex-into-r-plots
DrewConway

C'è qualche suggerimento su come ottenere il viewportsda un ggplot2. Se ciò può essere fatto, credo che cambiare i segni x-tic sarà semplice.
Sam

Risposte:


152

Ecco un collegamento a un eccellente wiki che spiega come inserire i simboli greci in ggplot2. In sintesi, ecco cosa fai per ottenere i simboli greci

  1. Etichette di testo: utilizzare parse = Tall'interno geom_texto annotate.
  2. Etichette dell'asse: utilizzare expression(alpha)per ottenere l'alfabeto greco.
  3. Etichette sfaccettate: utilizzare labeller = label_parsedall'interno facet.
  4. Etichette legenda: utilizzare bquote(alpha == .(value))nell'etichetta della legenda.

Puoi vedere l'utilizzo dettagliato di queste opzioni nel link

MODIFICARE. L'obiettivo di utilizzare simboli greci lungo i segni di graduazione può essere raggiunto come segue

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

Per la documentazione completa sui vari simboli disponibili quando si esegue questa operazione e su come utilizzarli, vedere ?plotmath.


Voglio che quei simboli greci segnino i tic. Non sono sicuro di seguire questa risposta. Lo proverò e ti risponderò. Grazie per la direzione.
Sam

Almeno questo non funziona per il mio scopo. Grazie per il puntatore però.
Sam

@ Sam, controlla il codice di esempio nella mia modifica. Ti dà simboli greci lungo i segni di graduazione dell'asse x. È questo quello che stavi cercando?
Ramnath

8
Vorrei aggiungere un asterisco ("*") dopo una lettera greca. Qualcuno sa come farlo?
polarizza il

1
Recentemente ho appreso che un'altra opzione è quella di utilizzare substitute, funziona anche in luoghi in cui expressionnon funziona e consente anche altre formattazioni come italics, boldecc.
Sam

40

Soluzione più semplice: usa caratteri Unicode

Nessun expressiono altri pacchetti necessari.
Non sono sicuro che questa sia una funzionalità più recente per ggplot, ma funziona. Rende anche facile mescolare testo greco e testo normale (come l'aggiunta di "*" alle zecche)

Usa solo caratteri Unicode all'interno della stringa di testo. sembra funzionare bene per tutte le opzioni a cui riesco a pensare. Modifica: in precedenza non funzionava nelle etichette dei facet. Apparentemente questo è stato risolto ad un certo punto.

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

Creato il 28/08/2019 dal pacchetto reprex (v0.3.0)


4
Bella risposta. Per ulteriori informazioni su caratteri Unicode, vedi: stackoverflow.com/questions/27690729/...
PatrickT

molto flessibile !!
Joaoal

2
Questo è il modo migliore perché non ti affanni con i tipi di oggetti formati da expressiono bquote- ti ritroverai con un oggetto personaggio che puoi usare in qualsiasi altro modo in cui usi oggetti personaggio.
GMSL

1
Questo non è solo il metodo più semplice, ma anche il migliore, poiché funziona nella maggior parte dei casi e non si basa su altre funzioni.
Squeezie il

Questo genera molti avvisi, circa un centinaio di righe di: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>
Patafiks il

37

Usa expression(delta)dove "delta" per lettere minuscole δe "Delta" per ottenere capitale Δ.

Ecco l'elenco completo dei caratteri greci:

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

MODIFICA: copiato dai commenti, quando si utilizza insieme ad altre parole usa come:expression(Delta*"price")


1
Come posso ottenere un'etichetta simile Δprice? expression(Deltaprice)non funziona, né funzionaexpression(Delta price)
jf328

2
Grazie. Ma com'è esattamente? xlab(expression(Delta)price)dà un errore
jf328

3
espressione (prezzo Delta *)
kennyB

C'è un modo per ottenere un Upsilon in forma greca (al contrario di quello latino)? Vedi en.wikipedia.org/wiki/Upsilon Corrispondenza con il latino Y (vorrei qualcosa come il terzo carattere in en.wikipedia.org/wiki/Upsilon#/media/… )
Adrian

6
l'espressione (Delta * "prezzo") funziona. Non amare la sintassi.
daknowles

16

Non hai bisogno del latex2exppacchetto per fare quello che volevi fare. Il codice seguente farebbe il trucco.

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

inserisci qui la descrizione dell'immagine

Inoltre, alcuni commenti (senza risposta a questo punto) chiedevano di inserire un asterisco (*) dopo una lettera greca. expression(alpha~"*")funziona, quindi suggerisco di provarlo.

Sono stati richiesti più commenti su come ottenere Δ Pricee trovo il modo più semplice per ottenerlo expression(Delta~price)). Se devi aggiungere qualcosa prima della lettera greca, puoi anche fare questo: il expression(Indicative~Delta~price)che ti dà:

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.