จะใช้สัญลักษณ์กรีกใน ggplot2 ได้อย่างไร?


105

หมวดหมู่ของฉันต้องตั้งชื่อด้วยตัวอักษรกรีก ฉันใช้ggplot2งานอยู่และใช้งานได้ดีกับข้อมูล น่าเสียดายที่ฉันไม่สามารถหาวิธีใส่สัญลักษณ์กรีกเหล่านั้นบนแกน x ได้ (ที่เครื่องหมายถูก) และทำให้มันปรากฏในคำอธิบายแผนภูมิ มีวิธีใดบ้างที่จะทำได้?

อัปเดต: ฉันได้ดูลิงก์แล้วอย่างไรก็ตามไม่มีวิธีการที่ดีที่อธิบายถึงการบรรลุสิ่งที่ฉันต้องการ


4
ดูการอภิปรายของexpressionฟังก์ชันที่นี่: stackoverflow.com/questions/1395105/getting-latex-into-r-plots
DrewConway

มีคำแนะนำในการรับviewportsจาก ggplot2 หรือไม่ ถ้าทำได้ผมเชื่อว่าการเปลี่ยนเครื่องหมาย x-tic จะตรงไปตรงมา
แซม

คุณสามารถใช้latex2exppackage: cran.r-project.org/web/packages/latex2exp/vignettes/…
Enrique Pérez Herrero

คำตอบ:


153

นี่คือลิงค์ไปยังวิกิที่ยอดเยี่ยมที่อธิบายวิธีใส่สัญลักษณ์กรีกใน ggplot2 โดยสรุปนี่คือสิ่งที่คุณทำเพื่อให้ได้สัญลักษณ์กรีก

  1. ป้ายข้อความ:ใช้parse = Tภายในgeom_textหรือannotate.
  2. ป้ายกำกับแกน:ใช้expression(alpha)เพื่อรับอัลฟ่ากรีก
  3. Facet Labels:การใช้งานภายในlabeller = label_parsedfacet
  4. Legend Labels:ใช้bquote(alpha == .(value))ในป้ายกำกับตำนาน

คุณสามารถดูรายละเอียดการใช้งานตัวเลือกเหล่านี้ได้ในลิงค์

แก้ไข วัตถุประสงค์ของการใช้สัญลักษณ์กรีกตามเครื่องหมายขีดสามารถทำได้ดังนี้

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

?plotmathสำหรับเอกสารที่สมบูรณ์เกี่ยวกับสัญลักษณ์ต่างๆที่มีอยู่เมื่อทำเช่นนี้และวิธีการใช้พวกเขาเห็น


ฉันต้องการให้สัญลักษณ์กรีกเหล่านั้นทำเครื่องหมายสำบัดสำนวน ฉันไม่แน่ใจว่าฉันทำตามคำตอบนี้ ฉันจะลองสิ่งนี้และเขียนกลับมา ขอบคุณสำหรับทิศทาง
แซม

สิ่งนี้ไม่ได้ผลสำหรับจุดประสงค์ของฉันอย่างน้อยที่สุด ขอบคุณสำหรับตัวชี้ว่า
แซม

@ แซมลองดูโค้ดตัวอย่างในการแก้ไขของฉัน มันให้สัญลักษณ์กรีกตามเครื่องหมายขีดแกน x ของคุณ นี่คือสิ่งที่คุณกำลังมองหาใช่ไหม
Ramnath

8
ฉันต้องการเพิ่มเครื่องหมายดอกจัน ('*') หลังตัวอักษรภาษากรีก ใครทราบวิธีการทำเช่นนี้
โพลาไรซ์

1
ฉันเพิ่งรู้ว่าตัวเลือกอื่นคือการใช้งานsubstituteนี้ยังทำงานในสถานที่ที่expressionไม่ได้ทำงานและยังช่วยให้การจัดรูปแบบอื่น ๆ เช่นitalics, boldฯลฯ
แซม

45

วิธีแก้ปัญหาที่ง่ายที่สุด: ใช้อักขระ Unicode

ไม่expressionจำเป็นหรือแพ็คเกจอื่น ๆ
ไม่แน่ใจว่านี่เป็นฟีเจอร์ใหม่สำหรับ ggplot หรือเปล่า แต่ใช้ได้ นอกจากนี้ยังทำให้ง่ายต่อการผสมภาษากรีกและข้อความปกติ (เช่นการเพิ่ม '*' ในเครื่องหมายขีด)

เพียงใช้อักขระ Unicode ภายในสตริงข้อความ ดูเหมือนจะใช้ได้ดีกับตัวเลือกทั้งหมดที่ฉันคิดได้ แก้ไข:ก่อนหน้านี้ใช้ไม่ได้ในป้ายกำกับด้าน สิ่งนี้ได้รับการแก้ไขแล้วในบางจุด

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

สร้างเมื่อ 2019-08-28 โดยแพ็คเกจ reprex (v0.3.0)


4
คำตอบที่ดี สำหรับข้อมูลเพิ่มเติมเกี่ยวกับอักขระ Unicode โปรดดู: stackoverflow.com/questions/27690729/…
PatrickT

คล่องตัวมาก !!
joaoal

2
นี่เป็นวิธีที่ดีที่สุดเพราะคุณไม่ต้องกังวลเกี่ยวกับประเภทออบเจ็กต์ที่เกิดจากexpressionหรือbquote- คุณจบลงด้วยอ็อบเจกต์อักขระที่คุณสามารถใช้ในลักษณะอื่น ๆ ที่คุณใช้อ็อบเจ็กต์อักขระ
GMSL

1
นี่ไม่ใช่แค่วิธีที่ง่ายที่สุดเท่านั้น แต่ยังเป็นวิธีที่ดีที่สุดเนื่องจากใช้งานได้ในกรณีส่วนใหญ่และไม่ต้องพึ่งพาฟังก์ชันอื่น ๆ
Squeezie

สิ่งนี้สร้างคำเตือนมากมายประมาณร้อยบรรทัด: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

38

การใช้งานexpression(delta)ที่ 'เดลต้า' สำหรับตัวพิมพ์เล็กδและ 'เดลต้า' Δจะได้รับทุน

นี่คือรายชื่อตัวละครกรีกทั้งหมด:

Ααอัลฟา
Ββเบต้า
Γγแกมมา
Δδเดลต้า
Εε epsilon
Ζζซีตา
Ηη eta
Θθ theta
Ιιน้อยนิด
Κκคัปปา
Λλแลมบ์ดา
Μμหมู่
Νν nu
Ξξ Xi
Οοไมครอน
Ππปี่
ρΡ rho
Σσ sigma
Ττ tau
Υυ upsilon Φφ
phi
Χχ chi
Ψψ psi
Ωω omega

แก้ไข:คัดลอกจากความคิดเห็นเมื่อใช้ร่วมกับคำอื่น ๆ ใช้เช่น:expression(Delta*"price")


1
ฉันจะได้รับฉลากเช่นΔprice? expression(Deltaprice)ใช้ไม่ได้ก็ไม่expression(Delta price)
jf328

2
ขอบคุณ. แต่เป็นอย่างไรกันแน่? xlab(expression(Delta)price)ให้ข้อผิดพลาด
jf328

3
นิพจน์ (ราคา Delta *)
kennyB

มีวิธีรับ Upsilon ในรูปแบบกรีก (ตรงข้ามกับรูปแบบละติน) หรือไม่? ดูen.wikipedia.org/wiki/Upsilon Correspondence with Latin Y (ฉันต้องการอักขระตัวที่สามในen.wikipedia.org/wiki/Upsilon#/media/… )
Adrian

6
นิพจน์ (Delta * "price") ใช้งานได้ อย่ารักไวยากรณ์
daknowles

16

คุณไม่จำเป็นต้องใช้latex2expแพ็คเกจเพื่อทำสิ่งที่คุณต้องการ รหัสต่อไปนี้จะทำเคล็ดลับ

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

ป้อนคำอธิบายภาพที่นี่

นอกจากนี้ความคิดเห็นบางส่วน (ยังไม่ได้รับคำตอบ ณ จุดนี้) ถามเกี่ยวกับการใส่เครื่องหมายดอกจัน (*) หลังตัวอักษรภาษากรีก expression(alpha~"*")ได้ผลดังนั้นฉันขอแนะนำให้ลองดู

ความคิดเห็นเพิ่มเติมเกี่ยวกับการถามและผมพบว่าวิธีที่ง่ายที่สุดในการประสบความสำเร็จที่เป็นΔ Price expression(Delta~price))หากคุณต้องการเพิ่มบางอย่างก่อนตัวอักษรกรีกคุณสามารถทำได้ expression(Indicative~Delta~price)ซึ่งจะทำให้คุณ:

ป้อนคำอธิบายภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.