示例代码:
rsq <- round(cor(mtcars$disp, mtcars$mpg)^2, 2) # rsq = 0.72
ggplot(mtcars, aes(x = disp, y = mpg)) +
geom_point() +
geom_smooth(method = lm, aes(color = "Linear")) +
scale_color_discrete(labels = expression(paste("R"^2, " = ", rsq)))
我希望图例显示为
R² = 0.72
。我知道我可以只使用unicode符号来表示²,但是总的来说,我认为必须有一种方法可以将数学表达式和存储在对象中的计算值结合起来。
我尝试使用
eval
和paste
的各种组合,但是似乎我一直遇到相同的问题。编辑#1:
我尝试根据to this answer使用
bquote
像这样:scale_color_discrete(labels = bquote(R^2 == .(rsq)))
事实证明,仅将图例呈现为
==
。编辑#2:
即使下面的答案有效,对于更复杂的表达式,似乎也很不方便,例如:
我仍然希望有一个更简单的解决方案。
最佳答案
原来bquote
事情已经结束了。
这有效(尽管感觉……不是最理想的):
scale_color_discrete(labels = as.expression(bquote(R^2~"="~.(rsq))))
也可以:
scale_color_discrete(labels = as.expression(bquote(R^2 == .(rsq))))
显然需要
~
来将元素“粘贴”在一起,而无需实际paste()
对其进行粘贴吗? as.expression
可以完成expression
无法完成的工作。我不确定到底是怎么回事,但是a,它起作用了:非常感谢Peter Dalgaard!