如何在ggplot2图例标签中添加Latex代码?

12

考虑以下示例:

p <- ggplot(data = data.frame(A=c(1,2,3,4,5,6,7,8),B=c(4,1,2,1,3,2,4,1),C=c("A","B","A","B","A","B","A","B")))
p <- p + geom_line(aes(x = A, y = B,color = C))
我希望将图例中的标签从"A"和"B"更改为LaTeX公式,比如"$A^h_{t-k}$"和"$B^h_{t-k}$"。

显然,根据这里的答案,有方法可以实现这一点。但是,我真的很难让它正常工作。有人能给我分解一下吗?

2个回答

21

要使用真正的LaTeX语法,你可以使用latex2exp包。注意使用unname(),这是必要的。

library(ggplot2)
library(latex2exp)
df <- data.frame(A = c(1,2,3,4,5,6,7,8),
                 B = c(4,1,2,1,3,2,4,1),
                 C = c("A","B","A","B","A","B","A","B")
)
ggplot(df) + 
  geom_line(aes(x = A, y = B,color = C)) +
  scale_color_discrete(labels = unname(TeX(c("$A_{t-k}^h$", "$B_{t-k}^h$"))))

该内容于2018-05-29由reprex包(v0.2.0)创建。


6
这很好用,但是对于\foo调用,有一个小问题。在我的代码中,我不得不使用TeX("$\\Delta")。只是提醒一下,可能需要双重的\\转义符。 - Hendy
请注意使用unname(),这是必要的。 - jessexknight
我不知道,但是尝试一下不带它,它就不工作。 - Rory Nolan
1
也许是因为当 labels= 被赋予一个命名的值向量时,它试图将 values= 参数中的名称与实际值关联起来。例如,使用 RoryNolan 的代码,如果我们改用 names(.),我们就会看到 TeX 返回一个带有名称 c("$A_{t-k}^h$", "$B_{t-k}^h$") 的命名向量。这些名称在原始数据中并不存在,因此它们不会正确地应用于数据值 "A""B"。人们可以使用 setNames(., c("B", "A")) 替换 unname(.),从而获得类似(但相反)的结果。 - r2evans

7


library(ggplot2)
df <- data.frame(A = c(1,2,3,4,5,6,7,8),
                 B = c(4,1,2,1,3,2,4,1),
                 C = c("A","B","A","B","A","B","A","B")
                 )
ggplot(df) + 
    geom_line(aes(x = A, y = B,color = C)) +
    scale_color_discrete(labels = c(expression(A[t-k]^h), expression(B[t-k]^h)))


这对于轴标题对我来说没有起作用。有没有一种方法可以实现呢?例如,scale_x_continuous(expression(\Delta)) - Hendy
1
scale_x_continuous(expression(Delta)) 对我有效。 - GGamba
啊,太好了。我会试一下的。现在看到回复,很抱歉没有直接检查包。它可能说明类似于\不是必需的,而我只是没有理解。感谢及时的更正! - Hendy

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