如何通过annotate在ggplot中使用LaTeX

3

我有这个问题已经有一段时间了,但是一直没有找到解决方法。例如,当我想标记感兴趣的参数,如中心趋势(平均数、中位数等),我会创建一个垂直和/或水平线,并使用annotate进行标注。然而,我无法同时使用LaTeX和非硬编码值。下面是一个最小可重现示例:

data <- data.frame(stat = rnorm(1000))
plot <- 
    ggplot(data, aes(x = stat)) + 
    geom_histogram(aes(y=..density..), fill="aquamarine", color="black") + 
    geom_density(color="black", size=1) + 
    geom_vline(xintercept = 0, color = "blue", linetype="dashed", size = 1) +
    annotate("text", x=-0.2, y=0.2,
             label=paste0("Mean = ", round(mean(data$stat), 4)),
             angle=90, size=7, color="black")

plot

请看此处图示:https://istack.dev59.com/QzojQ.webp 在上述示例中,我生成了一些随机正态数据,将其保存到数据框中并绘制出来。我添加了一个虚线垂直线,对应于数据的平均值,然后通过注释进行标记。需要注意的是,由于 LaTeX 运算符不起作用且随机字母对我来说不理想,因此在标签中明确写入“Mean”。
我发现的一种解决方案是在标记时使用 expression 而不是 paste0,如下所示:
data <- data.frame(stat = rnorm(1000))
plot <- 
    ggplot(data, aes(x = stat)) + 
    geom_histogram(aes(y=..density..), fill="aquamarine", color="black") + 
    geom_density(color="black", size=1) + 
    geom_vline(xintercept = 0, color = "blue", linetype="dashed", size = 1) +
    annotate("text", x=-0.25, y=0.2, label = expression(mu ~ "= -0.0403"),
             angle=90, size = 7, color = "black")

plot

请看这里的图表:https://istack.dev59.com/rnW5i.webp 这样我们就可以在绘图中显示LaTeX字符,例如我们的$ \mu $。但是现在的缺点是我必须在表达式字段中硬编码平均值。这不理想,我不想这样做。我想能够像下面这样做,但这并行不通:
annotate("text", x=-0.25, y=0.2,            
         label = expression(mu ~ round(mean(data$stat), 4)),
         angle=90, size = 7, color = "black")

我一直无法找到解决方法,所以非常感谢任何帮助。

1个回答

1

要解决这个问题的一个选项是将表达式创建为字符字符串,而不是使用 expression,并在 annotate 中添加 parse=TRUE

library(ggplot2)
set.seed(123)

data <- data.frame(stat = rnorm(1000))
ggplot(data, aes(x = stat)) +
  geom_histogram(aes(y = after_stat(density)), fill = "aquamarine", color = "black") +
  geom_density(color = "black", size = 1) +
  geom_vline(xintercept = 0, color = "blue", linetype = "dashed", size = 1) +
  annotate("text",
    x = -0.2, y = 0.2,
    label = paste0("mu ==", round(mean(data$stat), 4)),
    angle = 90, size = 7, color = "black", parse = TRUE
  )
#> Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
#> ℹ Please use `linewidth` instead.
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.


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