如何在ggplot2中使用希腊符号?


101

我的类别需要用希腊字母命名。我正在使用ggplot2,它可以很好地处理数据。不幸的是,我无法弄清楚如何将这些希腊符号放在x轴上(在刻度线处)并使它们出现在图例中。有什么办法吗?

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



是否有viewports从ggplot2 获取的提示。如果可以做到,我相信更改X-tic标记将很简单。
山姆

Answers:


152

这是一个出色的Wiki 的链接,该Wiki解释了如何在ggplot2中放置希腊符号。总之,这是获取希腊符号的方法

  1. 文字标签:parse = Tgeom_text或中使用annotate
  2. 轴标签:使用expression(alpha)获得的希腊字母。
  3. 构面标签:labeller = label_parsed在内部使用facet
  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,请在我的编辑中查看示例代码。它沿x轴刻度线为您提供希腊符号。这是您要找的东西吗?
Ramnath

8
我想在希腊字母后添加一个星号('*')。有人知道怎么做吗?
极化

1
我最近才知道,另一种选择是使用substitute,这也适用于地方的地方expression不工作,甚至允许其他格式一样italicsbold等等
山姆

40

最简单的解决方案:使用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"))

reprex软件包(v0.3.0)创建于2019-08-28


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

37

使用expression(delta)小写的“ delta” δ和“ Delta”来获取资本Δ

这是希腊字符的完整列表:

Αα阿尔法
Ββ的β
Γγ的γ
Δδ增量
Εε的ε-
Ζζζ电
ΗηETA
ΘθTHETA
Ιι丝毫
Κκ卡帕
Λλ的λ
Μμ亩
ΝνNU
ΞξXI
ΟοOMICRON
ΠπPI
Ρρ RHO
σσ西格玛
ττ的tau
υυ埃普西隆
φφ披
χχ智
ψψPSI
Ωω欧米加

编辑:从注释复制,当与其他单词结合使用时,使用类似:expression(Delta*"price")


1
如何获得类似的标签Δpriceexpression(Deltaprice)不起作用,也不起作用expression(Delta price)
jf328

2
谢谢。但是那到底如何呢?xlab(expression(Delta)price)给出一个错误
jf328

3
expression(Delta * price)
kennyB '17

有没有办法获得希腊形式(而不是拉丁形式)的Upsilon?参见en.wikipedia.org/wiki/Upsilon与拉丁字母Y的对应关系(我想要类似en.wikipedia.org/wiki/Upsilon#/media/…中的第三个字符)
Adrian

6
expression(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)

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.