ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

请参阅此处对 expression 函数的讨论:stackoverflow.com/questions/1395105/getting-latex-into-r-plots
是否有关于从 ggplot2 获取 viewports 的任何提示。如果可以做到这一点,我相信更改 x-tic 标记将是直截了当的。

j
joran

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

文本标签:在 geom_text 或注释中使用 parse = T。轴标签:使用表达式(alpha)获取希腊字母。构面标签:在构面内使用 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 等。
M
Matt L.

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

https://i.imgur.com/5feSM91.png

reprex package (v0.3.0) 于 2019 年 8 月 28 日创建


不错的答案。有关 unicode 字符的更多信息,请参阅:stackoverflow.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>
M
Matas Vaitkevicius

使用 expression(delta) 其中 'delta' 表示小写 δ,使用 'Delta' 获得大写 Δ

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

α alpha B β beta C γ gamma D d delta E e epsilon Z z zeta H h eta Θ θ theta I i iota K k kappa L λ lambda M μ mu N ν nu ξ ξ xi O o omicron Π π pi Ρ ρ rho Σ σ sigma T τ tau Y y upsilon Φ φ phi X χ chi Ψ ψ psi Ω ω omega

编辑:从评论中复制,当与其他词一起使用时使用:expression(Delta*"price")


如何获得像 Δprice 这样的标签? expression(Deltaprice) 不起作用,expression(Delta price) 也不起作用
谢谢。但这究竟是怎么回事? xlab(expression(Delta)price) 给出错误
表达式(增量*价格)
有没有办法获得希腊形式(而不是拉丁形式)Upsilon?请参阅 en.wikipedia.org/wiki/Upsilon 与拉丁语 Y 的对应(我想要 en.wikipedia.org/wiki/Upsilon#/media/… 中的第三个字符)
表达式(Delta *“价格”)有效。不喜欢语法。
o
onlyphantom

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

https://i.stack.imgur.com/e9Psf.png

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

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

https://i.stack.imgur.com/nJUZy.png