Bagaimana cara menggunakan simbol Yunani di ggplot2?

101

Kategori saya perlu diberi nama dengan huruf Yunani. Saya menggunakan ggplot2, dan ini bekerja dengan baik dengan data. Sayangnya saya tidak dapat menemukan cara untuk meletakkan simbol-simbol yunani tersebut pada sumbu x (pada tanda centang) dan juga membuatnya muncul di legenda. Apakah ada cara untuk melakukannya?

PEMBARUAN: Saya telah melihat tautannya , namun, tidak ada metode bagus yang dijelaskan untuk mencapai apa yang ingin saya lakukan.

Sam
sumber
4
Lihat pembahasan expressionfungsi di sini: stackoverflow.com/questions/1395105/getting-latex-into-r-plots
DrewConway
Apakah ada petunjuk untuk mendapatkan viewportsdari ggplot2. Jika itu bisa dilakukan, saya yakin bahwa mengubah tanda x-tic akan langsung dilakukan.
Sam
Anda dapat menggunakan latex2exppaket: cran.r-project.org/web/packages/latex2exp/vignettes/…
Enrique Pérez Herrero

Jawaban:

152

Berikut ini tautan ke wiki yang luar biasa yang menjelaskan cara meletakkan simbol yunani di ggplot2. Singkatnya, inilah yang Anda lakukan untuk mendapatkan simbol yunani

  1. Label Teks: Gunakan parse = Tdi dalam geom_textatau annotate.
  2. Label Sumbu: Gunakan expression(alpha)untuk mendapatkan alfa yunani.
  3. Label Faset: Gunakan labeller = label_parseddi dalam facet.
  4. Label Legenda: Gunakan bquote(alpha == .(value))di label legenda.

Anda dapat melihat penggunaan detail dari opsi ini di tautan

EDIT. Tujuan penggunaan simbol yunani di sepanjang tanda centang dapat dicapai sebagai berikut

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

Untuk dokumentasi lengkap tentang berbagai simbol yang tersedia saat melakukan ini dan cara menggunakannya, lihat ?plotmath.

Ramnath
sumber
Saya ingin Simbol Yunani itu menandai tics. Saya tidak yakin saya mengikuti jawaban ini. Saya akan mencoba ini dan menulis kembali. Terima kasih atas arahannya.
Sam
Setidaknya ini tidak berhasil untuk tujuan saya. Terima kasih atas penunjuknya.
Sam
@ Sam, lihat kode contoh di edit saya. Ini memberi Anda simbol yunani di sepanjang tanda centang sumbu x Anda. Apakah ini yang Anda cari?
Ramnath
8
Saya ingin menambahkan asterisk ('*') setelah huruf Yunani. Ada yang tahu bagaimana melakukan ini?
mempolarisasikan
1
Saya baru-baru ini mengetahui bahwa opsi lain adalah menggunakan substitute, ini juga berfungsi di tempat-tempat di mana expressiontidak berfungsi, dan bahkan memungkinkan pemformatan lain seperti italics, bolddll.
Sam
40

Solusi paling sederhana: Gunakan Karakter Unicode

Tidak ada expressionatau paket lain yang dibutuhkan.
Tidak yakin apakah ini adalah fitur yang lebih baru untuk ggplot, tetapi berfungsi. Itu juga memudahkan untuk mencampur teks Yunani dan biasa (seperti menambahkan '*' ke tanda centang)

Cukup gunakan karakter unicode dalam string teks. tampaknya berfungsi dengan baik untuk semua opsi yang dapat saya pikirkan. Edit: sebelumnya tidak berfungsi di label faset. Ini rupanya telah diperbaiki di beberapa titik.

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

Dibuat pada 2019-08-28 oleh paket reprex (v0.3.0)

Matt L.
sumber
4
Jawaban bagus. Untuk informasi lebih lanjut tentang karakter unicode, lihat: stackoverflow.com/questions/27690729/…
PatrickT
sangat fleksibel !!
joaoal
2
Ini adalah cara terbaik karena Anda tidak bingung dengan tipe objek yang dibentuk oleh expressionatau bquote- Anda berakhir dengan objek karakter yang dapat Anda gunakan dengan cara lain Anda menggunakan objek karakter.
GMSL
1
Ini bukan hanya Metode termudah, tetapi juga yang terbaik, karena ini berfungsi di banyak kasus dan tidak bergantung pada fungsi lain.
Squeezie
Ini menghasilkan banyak peringatan, sekitar seratus baris: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

Gunakan di expression(delta)mana 'delta' untuk huruf kecil δdan 'Delta' untuk mendapatkan modal Δ.

Berikut daftar lengkap karakter Yunani:

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

EDIT: Disalin dari komentar, saat digunakan bersama dengan kata lain, gunakan seperti:expression(Delta*"price")

Matas Vaitkevicius
sumber
1
Bagaimana saya bisa mendapatkan label seperti Δprice? expression(Deltaprice)tidak berfungsi, juga tidakexpression(Delta price)
jf328
2
Terima kasih. Tapi bagaimana tepatnya? xlab(expression(Delta)price)memberikan kesalahan
jf328
3
ekspresi (Delta * harga)
kennyB
Adakah cara untuk mendapatkan bentuk Yunani (kebalikan dari bentuk Latin) Upsilon? Lihat en.wikipedia.org/wiki/Upsilon Korespondensi dengan Latin Y (Saya ingin sesuatu seperti karakter ketiga di en.wikipedia.org/wiki/Upsilon#/media/… )
Adrian
6
ekspresi (Delta * "harga") berfungsi. Jangan suka sintaksnya.
daknowles
16

Anda tidak perlu latex2exppaket tersebut untuk melakukan apa yang ingin Anda lakukan. Kode berikut akan melakukan triknya.

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

masukkan deskripsi gambar di sini

Juga, beberapa komentar (belum terjawab pada poin ini) menanyakan tentang memberi tanda bintang (*) setelah huruf Yunani. expression(alpha~"*")bekerja, jadi saya sarankan untuk mencobanya.

Lebih banyak komentar tentang mendapatkan Δ Pricedan saya menemukan cara paling mudah untuk mencapainya adalah expression(Delta~price)). Jika Anda perlu menambahkan sesuatu sebelum huruf Yunani, Anda juga bisa melakukan ini: expression(Indicative~Delta~price)yang memberi Anda:

masukkan deskripsi gambar di sini

hanya hantu
sumber