如何将 bquote 与 ggplot2 geom_label 结合使用?
How to use bquote in combination with ggplot2 geom_label?
我已阅读以下文章:
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
我做错了什么?
ggplot 不喜欢在 geom_text
或 geom_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()
,因为您根本没有真正将此值映射到您的数据。
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’ quotes its
argument except that terms wrapped in ‘.()’ are evaluated in the
specified ‘where’ environment.
2.) 将 bquote
放入列表中,因为 aes
需要向量或列表。
3.) 通过将相应的参数设置为 TRUE 告诉 geom_label
解析表达式。
我已阅读以下文章: 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
我做错了什么?
ggplot 不喜欢在 geom_text
或 geom_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()
,因为您根本没有真正将此值映射到您的数据。
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’ quotes its argument except that terms wrapped in ‘.()’ are evaluated in the specified ‘where’ environment.
2.) 将 bquote
放入列表中,因为 aes
需要向量或列表。
3.) 通过将相应的参数设置为 TRUE 告诉 geom_label
解析表达式。