如何将bquote与ggplot2 geom_label结合使用?

时间:2018-08-23 17:56:53

标签: r ggplot2 plotmath

我已阅读以下文章: https://trinkerrstuff.wordpress.com/2018/03/15/2246/

现在,我尝试在情节中将建议的方法与bquote一起使用。但是我无法正常工作。我有以下代码

x <- seq(0, 2*pi, 0.01)
y <- sin(x)
y_median <- median(y)
ggplot(mapping = aes(x = x, y = y)) + 
  geom_line() + 
  geom_label(aes(label = bquote("median" ~ y==~.y_median), x = 1, y = y_median))

我收到以下错误:

Error in as.data.frame.default(x[[i]], optional = TRUE) : 
  cannot coerce class ‘"formula"’ to a data.frame

我在做什么错了?

2 个答案:

答案 0 :(得分:3)

ggplot(mapping = aes(x = x, y = y)) + 
  geom_line() + 
  geom_label(aes(label = list(bquote("median" ~ y==~.(y_median))),
                 x = 1, y = y_median), 
             parse=TRUE)

要点:

1。)我修复了"median" ~ y==~.(y_median)中缺少的括号。 ?bquote帮助页面对此进行了讨论:

  

“ bquote”引用其        参数,除了用'。()'包装的术语是在        指定的“哪里”环境。

2。)将bquote放在列表中,因为aes需要一个向量或列表。

3。)通过将相应参数设置为TRUE,告诉geom_label解析表达式。

enter image description here

答案 1 :(得分:1)

ggplot不喜欢使用geom_textgeom_label层中标签的表达式。它喜欢使用字符串。因此,您可以这样做

ggplot(mapping = aes(x = x, y = y)) + 
  geom_line() + 
  annotate("text", label = deparse(bquote("median" ~ y==~.(y_median))), x = 1, y = y_median, parse=TRUE)

我们使用deparse()将其转换为字符串,然后使用parse=TRUE使ggplot将其解析回表达式。另外我在这里只使用了annotate(),因为您根本没有将这个值映射到您的数据。