我已阅读以下文章: 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
我在做什么错了?
答案 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
解析表达式。
答案 1 :(得分:1)
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()
,因为您根本没有将这个值映射到您的数据。