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

Posted

技术标签:

【中文标题】如何在ggplot2中使用希腊符号?【英文标题】:How to use Greek symbols in ggplot2? 【发布时间】:2011-07-14 16:52:34 【问题描述】:

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

更新: 我查看了link,但是,没有描述完成我想做的事情的好方法。

【问题讨论】:

在这里查看expression函数的讨论:***.com/questions/1395105/getting-latex-into-r-plots 是否有任何关于从 ggplot2 获取 viewports 的提示。如果可以做到这一点,我相信更改 x-tic 标记将是直截了当的。 你可以使用latex2exp包:cran.r-project.org/web/packages/latex2exp/vignettes/… 【参考方案1】:

最简单的解决方案:使用 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 package (v0.3.0) 于 2019 年 8 月 28 日创建

【讨论】:

不错的答案。有关 unicode 字符的更多信息,请参阅:***.com/questions/27690729/… 非常灵活!! 这是最好的方法,因为您不会在意 expressionbquote 形成的对象类型 - 您最终会得到一个可以以任何其他方式使用的角色对象使用字符对象。 这不仅是最简单的方法,也是最好的方法,因为它在大多数情况下都有效,并且不依赖于其他函数。 这会产生很多警告,大约一百行: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>【参考方案2】:

你不需要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))

此外,一些 cmets(截至目前尚未得到答复)询问在希腊字母后放置星号 (*)。 expression(alpha~"*") 有效,所以我建议尝试一下。

更多 cmets 询问有关获得Δ Price 的问题,我发现实现这一目标的最直接方法是expression(Delta~price))。如果你需要在希腊字母之前添加一些东西,你也可以这样做: expression(Indicative~Delta~price) 得到你:

【讨论】:

【参考方案3】:

使用expression(delta),其中“delta”表示小写δ,“Delta”表示大写Δ

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

ααα β β β Γ γ 伽马 Δ δ δ Ε ε epsilon ζ ζ zeta Η η η Θ θ theta ι ι iota Κ κ kappa Λ λ λ μμμ Ν ν nu Ξ ξ xi Ο ο 微米 Π π π Ρ ρ ρ Σ 西格玛 Τ τ τ Υ υ upsilon Φ φ φ χ χ Ψ ψ psi Ωωω

编辑:复制自 cmets,与其他词结合使用时,如:expression(Delta*"price")

【讨论】:

我怎样才能得到像Δprice这样的标签? expression(Deltaprice) 不起作用,expression(Delta price) 也不起作用 谢谢。但这究竟是怎么回事? xlab(expression(Delta)price) 报错 表达式(Delta*price) 有没有办法获得希腊形式(相对于拉丁形式)的 Upsilon?请参阅en.wikipedia.org/wiki/Upsilon 与拉丁语 Y 的对应(我想要en.wikipedia.org/wiki/Upsilon#/media/… 中的第三个字符) 表达式(Delta*"price") 有效。不喜欢这种语法。【参考方案4】:

这是一个优秀的 wiki 的 link,它解释了如何在 ggplot2 中放置希腊符号。总而言之,这是您获取希腊符号的方法

    文本标签:geom_textannotate 中使用parse = T轴标签:使用expression(alpha) 获取希腊字母。 构面标签:facet 中使用labeller = label_parsed图例标签:在图例标签中使用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 轴刻度线为您提供希腊符号。这是你要找的吗? 我想在希腊字母后添加一个星号 ('*')。有人知道怎么做吗? 我最近了解到另一种选择是使用substitute,这也适用于expression 不起作用的地方,甚至允许使用其他格式,如italicsbold 等。

以上是关于如何在ggplot2中使用希腊符号?的主要内容,如果未能解决你的问题,请参考以下文章

如何以斜体打印小写希腊字母 [ggplot 轴标题]

使用 Altair 和 Jupyter 绘图时如何在轴标签中显示希腊字母?

如何在 matplotlib 条形图中用希腊符号替换主轴和次轴的图例标签?

如何在 matlab 注释中添加希腊字符?

如何在ChemDraw中打出符号π

如何在matlab图形中插入希腊字母