使用ggplot2如何使用希腊字母符号?

156

我的分类需要用希腊字母命名。我正在使用ggplot2,它可以很好地与数据配合使用。不幸的是,我无法弄清楚如何在x轴上(在刻度处)放置那些希腊符号,并使它们出现在图例中。有没有什么办法可以做到这一点?

更新: 我看了一下链接,但是没有描述实现我想要做的事情的好方法。


4
请参考这里关于expression函数的讨论:https://dev59.com/znM_5IYBdhLWcg3wZSPX - DrewConway
有没有关于从ggplot2获取“视口”的提示。如果可以做到这一点,我相信更改x轴刻度将是直截了当的。 - Sam
您可以使用 latex2exp 包:https://cran.r-project.org/web/packages/latex2exp/vignettes/latex2exp.html - Enrique Pérez Herrero
4个回答

180
这里有一个链接,可以了解如何在ggplot2中使用希腊字母符号:link。简而言之,以下是获得希腊符号的方法:
  1. 文本标签:geom_textannotate 中使用 parse = T
  2. 轴标签:使用 expression(alpha) 来获取希腊字母 alpha。
  3. 分面标签:facet 中使用 labeller = label_parsed
  4. 图例标签:在图例标签中使用 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


我想用希腊符号标记刻度。我不确定我理解这个答案。我会尝试并回复。谢谢你的指导。 - Sam
这至少对我的目的没有用。不过还是谢谢你的指引。 - Sam
@Sam,请查看我编辑中的示例代码。它可以在您的x轴刻度线上提供希腊符号。这是您要找的吗? - Ramnath
9
我想在希腊字母后面添加星号(“*”),有人知道如何做吗? - polarise
2
我最近学到另一个选项是使用 substitute,这个方法可以在 expression 不起作用的地方使用,并且甚至允许其他格式化,如 斜体粗体 等。 - Sam

101

最简单的解决方案:使用Unicode字符

不需要任何表达式或其他软件包。
不确定这是否是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年8月28日,使用reprex package(v0.3.0)


8
好的回答。如需了解更多有关Unicode字符的信息,请参阅:https://dev59.com/Al4c5IYBdhLWcg3wqLte - PatrickT
非常灵活!! - joaoal
2
这是最好的方法,因为你不需要处理由expressionbquote形成的对象类型 - 你最终得到一个字符对象,可以像使用任何其他字符对象一样使用它。 - GMSL
2
这不仅是最简单的方法,也是最好的方法,因为它适用于大多数情况,并且不依赖于其他函数。 - Squeezie
1
我解决了这个问题。我需要在ggsave()中使用device = cairo_pdf。我在这里使用的是Linux,显然这是默认设备的问题。 - Patafikss
显示剩余2条评论

56

使用expression(delta)获取小写的δ,使用'Delta'获取大写的Δ

以下是完整的希腊字符列表:

Α α alpha(阿尔法)
Β β beta(贝塔)
Γ γ gamma(伽马)
Δ δ delta(德尔塔)
Ε ε epsilon(伊普西隆)
Ζ ζ zeta(捷塔)
Η η eta(伊塔)
Θ θ theta(西塔)
Ι ι iota(约塔)
Κ κ kappa(喀帕)
Λ λ lambda(兰姆达)
Μ μ mu(缪)
Ν ν nu(纽)
Ξ ξ xi(克西)
Ο ο omicron(奥密克戎)
Π π pi(派)
Ρ ρ rho(柔)
Σ σ sigma(西格玛)
Τ τ tau(陶)
Υ υ upsilon(宇普西隆)
Φ φ phi(斐)
Χ χ chi(卡希)
Ψ ψ psi(普西)
Ω ω omega(欧米茄)

编辑:从评论中复制,当与其他单词一起使用时,可以像这样使用:expression(Delta * "价格")


1
我该如何获得类似于 Δprice 的标签?expression(Deltaprice) 不起作用,expression(Delta price) 也不行。 - jf328
2
谢谢。但是这是怎么回事呢?xlab(expression(Delta)price)会报错。 - jf328
3
表达式(Delta*价格) - kennyB
有没有办法获取希腊式(而不是拉丁式)的Upsilon?请参见https://en.wikipedia.org/wiki/Upsilon与拉丁字母Y的对应关系(我想要像https://en.wikipedia.org/wiki/Upsilon#/media/File:Y-like_European_letters.svg中的第三个字符一样的东西)。 - Adrian
8
Delta*“price”的表达式有效,但语法不是很好。 - daknowles

23

你不需要使用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),会得到下面的结果:

输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接