Làm thế nào để sử dụng các ký hiệu Hy Lạp trong ggplot2?


101

Danh mục của tôi cần được đặt tên bằng các chữ cái Hy Lạp. Tôi đang sử dụng ggplot2và nó hoạt động tốt với dữ liệu. Thật không may, tôi không thể tìm ra cách đặt các biểu tượng Hy Lạp đó trên trục x (tại các dấu tích) và cũng làm cho chúng xuất hiện trong chú giải. Có cách nào để làm điều đó?

CẬP NHẬT: Tôi đã xem liên kết , tuy nhiên, không có phương pháp nào tốt được mô tả để thực hiện những gì tôi muốn làm.


4
Xem cuộc thảo luận về expressionchức năng tại đây: stackoverflow.com/questions/1395105/getting-latex-into-r-plots
DrewConway,

Có gợi ý nào về việc lấy viewportstừ ggplot2 không. Nếu điều đó có thể được thực hiện, tôi tin rằng việc thay đổi dấu x-tic sẽ rất dễ dàng.
Sam

Câu trả lời:


152

Đây là một liên kết đến một wiki tuyệt vời giải thích cách đặt các ký hiệu Hy Lạp trong ggplot2. Tóm lại, đây là những gì bạn làm để có được các biểu tượng Hy Lạp

  1. Nhãn Văn bản: Sử dụng parse = Tbên trong geom_texthoặc annotate.
  2. Nhãn Axis: Sử dụng expression(alpha)để lấy alpha của người Hy Lạp.
  3. Nhãn khía cạnh: Sử dụng labeller = label_parsedbên trong facet.
  4. Nhãn chú giải: Sử dụng bquote(alpha == .(value))trong nhãn chú giải.

Bạn có thể xem cách sử dụng chi tiết của các tùy chọn này trong liên kết

BIÊN TẬP. Mục tiêu của việc sử dụng các ký hiệu Hy Lạp dọc theo các dấu tích có thể đạt được như sau

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

Để có tài liệu đầy đủ về các ký hiệu khác nhau có sẵn khi thực hiện việc này và cách sử dụng chúng, hãy xem ?plotmath.


Tôi muốn những Biểu tượng Hy Lạp đó để đánh dấu các tics. Tôi không chắc tôi làm theo câu trả lời này. Tôi sẽ thử điều này và viết lại. Cảm ơn bạn đã chỉ đạo.
Sam

Điều này ít nhất không hoạt động cho mục đích của tôi. Cảm ơn bạn cho con trỏ mặc dù.
Sam

@Sam, hãy xem mã ví dụ trong bản chỉnh sửa của tôi. Nó cung cấp cho bạn các biểu tượng Hy Lạp dọc theo các dấu tích trục x của bạn. Đây có phải là những gì bạn đang tìm kiếm?
Ramnath

8
Tôi muốn thêm dấu hoa thị ('*') sau một chữ cái Hy Lạp. Bất cứ ai biết làm thế nào để làm điều này?
polarize

1
Gần đây tôi đã biết rằng một tùy chọn khác là sử dụng substitute, tùy chọn này cũng hoạt động ở những nơi expressionkhông hoạt động và thậm chí cho phép các định dạng khác như italics, boldv.v.
Sam

40

Giải pháp đơn giản nhất: Sử dụng các ký tự Unicode

Không expressionhoặc các gói khác cần thiết.
Không chắc liệu đây có phải là một tính năng mới hơn cho ggplot hay không, nhưng nó hoạt động. Nó cũng giúp bạn dễ dàng trộn văn bản tiếng Hy Lạp và văn bản thông thường (như thêm '*' vào dấu tích)

Chỉ cần sử dụng các ký tự unicode trong chuỗi văn bản. dường như hoạt động tốt cho tất cả các tùy chọn mà tôi có thể nghĩ đến. Chỉnh sửa: trước đây nó không hoạt động trong các nhãn khía cạnh. Điều này rõ ràng đã được sửa chữa tại một số điểm.

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

Được tạo vào ngày 28 tháng 8 năm 2019 bởi gói reprex (v0.3.0)


4
Câu trả lời rất hay. Để biết thêm về các ký tự unicode, hãy xem: stackoverflow.com/questions/27690729/…
PatrickT

rất linh hoạt!!
joaoal

2
Đây là cách tốt nhất vì bạn không băn khoăn với các kiểu đối tượng được tạo bởi expressionhoặc bquote- bạn kết thúc với một đối tượng ký tự mà bạn có thể sử dụng theo bất kỳ cách nào khác khi sử dụng đối tượng ký tự.
GMSL

1
Đây không chỉ là Phương pháp dễ nhất mà còn là Phương pháp tốt nhất, vì nó hoạt động trong hầu hết các trường hợp và không dựa vào các chức năng khác.
Squeezie

Điều này tạo ra rất nhiều cảnh báo, khoảng một trăm dòng: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

36

Sử dụng expression(delta)trong đó 'delta' cho chữ thường δvà 'Delta' để lấy vốn Δ.

Đây là danh sách đầy đủ các ký tự Hy Lạp:

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

CHỈNH SỬA: Sao chép từ bình luận, khi sử dụng kết hợp với các từ khác sử dụng như:expression(Delta*"price")


1
Làm thế nào tôi có thể nhận được một nhãn như thế Δpricenào? expression(Deltaprice)không làm việc, cũng như thếexpression(Delta price)
jf328

2
cảm ơn. Nhưng đó chính xác là như thế nào? xlab(expression(Delta)price)đưa ra một lỗi
jf328

3
biểu thức (Delta * giá)
kennyB

Có cách nào để có được Upsilon dạng Hy Lạp (trái ngược với dạng Latinh) không? Xem en.wikipedia.org/wiki/Upsilon Thư từ với chữ Y Latinh (Tôi muốn một cái gì đó giống như ký tự thứ ba trong en.wikipedia.org/wiki/Upsilon#/media/… )
Adrian

6
biểu thức (Delta * "price") hoạt động. Đừng yêu thích cú pháp.
daknowles

16

Bạn không cần latex2expgói để làm những gì bạn muốn làm. Đoạn mã sau sẽ thực hiện thủ thuật.

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

nhập mô tả hình ảnh ở đây

Ngoài ra, một số ý kiến ​​(chưa được trả lời cho đến thời điểm này) đã hỏi về việc đặt dấu hoa thị (*) sau một chữ cái Hy Lạp. expression(alpha~"*")hoạt động, vì vậy tôi khuyên bạn nên thử.

Nhiều ý kiến ​​hỏi về việc đạt được Δ Pricevà tôi thấy cách đơn giản nhất để đạt được điều đó là expression(Delta~price)). Nếu bạn cần thêm một cái gì đó trước chữ cái Hy Lạp, bạn cũng có thể làm điều này expression(Indicative~Delta~price):

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.