Jak używać greckich symboli w ggplot2?

102

Moje kategorie należy nazywać greckimi literami. Używam ggplot2i pięknie działa z danymi. Niestety nie mogę wymyślić, jak umieścić te greckie symbole na osi x (przy znacznikach), a także wyświetlić je w legendzie. Czy jest na to sposób?

AKTUALIZACJA: Rzuciłem okiem na link , jednak nie ma opisanej dobrej metody, aby osiągnąć to, co chcę zrobić.

Sam
źródło
4
Zobacz omówienie expressionfunkcji tutaj: stackoverflow.com/questions/1395105/getting-latex-into-r-plots
DrewConway,
Czy jest jakaś wskazówka dotycząca uzyskiwania viewportspliku z pliku ggplot2. Jeśli można to zrobić, uważam, że zmiana znaków X-tic będzie prosta.
Sam
Możesz użyć latex2exppakietu: cran.r-project.org/web/packages/latex2exp/vignettes/ ...
Enrique Pérez Herrero

Odpowiedzi:

153

Oto link do doskonałej wiki, która wyjaśnia, jak wstawiać greckie symbole w ggplot2. Podsumowując, oto co należy zrobić, aby uzyskać greckie symbole

  1. Etykiety tekstowe: używaj parse = Twewnątrz geom_textlub annotate.
  2. Etykiety osi: używaj, expression(alpha)aby uzyskać grecką alfę.
  3. Etykiety fasetowe: używaj labeller = label_parsedwewnątrz facet.
  4. Etykiety legendy: użyj bquote(alpha == .(value))w etykiecie legendy.

Możesz zobaczyć szczegółowe wykorzystanie tych opcji w linku

EDYTOWAĆ. Cel używania greckich symboli wzdłuż znaczników można osiągnąć w następujący sposób

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

Aby uzyskać pełną dokumentację dotyczącą różnych symboli, które są dostępne podczas wykonywania tej czynności i jak ich używać, zobacz ?plotmath.

Ramnath
źródło
Chcę, żeby te greckie symbole oznaczały tiki. Nie jestem pewien, czy rozumiem tę odpowiedź. Spróbuję tego i odpiszę. Dziękuję za wskazówki.
Sam
To nie działa przynajmniej w moim celu. Dziękuję jednak za wskazówkę.
Sam
@Sam, sprawdź przykładowy kod w mojej edycji. Daje greckie symbole wzdłuż znaczników osi X. Czy tego szukałeś?
Ramnath
8
Chciałbym dodać gwiazdkę („*”) po greckiej literze. Czy ktoś wie, jak to zrobić?
polaryzuj
1
Niedawno dowiedziałem się, że inna opcja jest do użytku substitute, to działa także w miejscach, w których expressionnie działa, a nawet umożliwia formatowanie jak inne italics, bolditd.
Sam
40

Najprostsze rozwiązanie: użyj znaków Unicode

Żadne expressionlub inne pakiety nie są potrzebne.
Nie jestem pewien, czy jest to nowsza funkcja ggplot, ale działa. Ułatwia także mieszanie tekstu greckiego i zwykłego (np. Dodanie „*” do znaczników)

Po prostu użyj znaków Unicode w ciągu tekstowym. wydaje się działać dobrze dla wszystkich opcji, które przychodzą mi do głowy. Edycja: poprzednio nie działało w etykietach aspektów. Najwyraźniej w pewnym momencie zostało to naprawione.

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

Utworzony 28.08.2019 przez pakiet reprex (v0.3.0)

Matt L.
źródło
4
Niezła odpowiedź. Aby uzyskać więcej informacji na temat znaków Unicode, zobacz: stackoverflow.com/questions/27690729/ ...
PatrickT
bardzo elastyczny!!
joaoal
2
Jest to najlepszy sposób, ponieważ nie przejmujesz się typami obiektów utworzonymi przez expressionlub bquote- otrzymujesz obiekt znakowy, którego możesz użyć w inny sposób, w jaki używasz obiektów znakowych.
GMSL
1
Jest to nie tylko najłatwiejsza metoda, ale także najlepsza, ponieważ działa w większości przypadków i nie opiera się na innych funkcjach.
Squeezie
To generuje wiele ostrzeżeń, około stu linijek: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

Użyj expression(delta)gdzie „delta” oznacza małe litery δi „Delta”, aby uzyskać kapitał Δ.

Oto pełna lista greckich znaków:

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

EDYTUJ: skopiowane z komentarzy, w połączeniu z innymi słowami użyj na przykład:expression(Delta*"price")

Matas Vaitkevicius
źródło
1
Jak mogę uzyskać taką etykietę Δprice? expression(Deltaprice)nie działa, też nieexpression(Delta price)
jf328
2
dzięki. Ale jak to dokładnie jest? xlab(expression(Delta)price)daje błąd
jf328
3
wyrażenie (cena Delta *)
kennyB
Czy istnieje sposób na uzyskanie formy greckiej (w przeciwieństwie do formy łacińskiej) Upsilon? Zobacz en.wikipedia.org/wiki/Upsilon Korespondencja z łacińskim Y (chciałbym coś takiego jak trzeci znak w en.wikipedia.org/wiki/Upsilon#/media/… )
Adrian
6
wyrażenie (Delta * "cena") działa. Nie podoba mi się składnia.
daknowles
16

Nie potrzebujesz latex2exppakietu, aby zrobić to, co chciałeś. Poniższy kod załatwi sprawę.

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

wprowadź opis obrazu tutaj

Ponadto w niektórych komentarzach (dotychczas bez odpowiedzi) pytano o umieszczenie gwiazdki (*) po greckiej literze. expression(alpha~"*")działa, więc proponuję spróbować.

Więcej komentarzy pytało o zdobycie Δ Pricei uważam, że najprostszym sposobem na osiągnięcie tego jest expression(Delta~price)). Jeśli chcesz dodać coś przed grecką literą, możesz również zrobić to: expression(Indicative~Delta~price)co daje:

wprowadź opis obrazu tutaj

onlyphantom
źródło