似乎没有任何效果,我尝试过
parse
,bquote
,paste
等。还尝试了其他用户的其他问答。有一个使用 do.call
的答案对我来说也不起作用。
我最终用手写了它们,但这似乎不是很理想的情况,我觉得这应该很简单,但不知何故我无法让它们工作。我正在尝试在基础
R
中执行此操作,但如果有任何其他解决方案(例如 ggplot
)也应该有效。这是我的代码
n = 1e6
d_norm <- rnorm(n)
d_norm_den <- density(d_norm)
plot(d_norm_den, ylab = NA, lwd = 3, main = NA, xlab = NA, xaxt = "n")
mtext(text = "Empirical Rule", side = 3, line = 2, cex = 2, font = 4)
mtext(text = "(Normal distribution)", side = 3, line = 0.5, cex = 1.25, font = 1)
axis(side = 1, at = seq(-3,3),
labels = expression(mu*'-'*3*sigma,mu*'-'*2*sigma,mu*'-'*1*sigma,mu,mu*'+'*1*sigma,mu*'+'*2*sigma,mu*'+'*3*sigma))
它生成如下图
有什么方法可以在
labels
函数中自动创建这个 axis()
参数吗?
您可以使用
lapply
创建表达式列表
vals <- -3:3
labels <- as.expression(lapply(vals, function(x)
if (x==0) quote(mu) else if (x<0) bquote(mu-.(abs(x))*sigma) else bquote(mu+.(x)*sigma)))
然后将其与
一起使用axis(side = 1, at = seq(-3,3), labels = labels)
一般情况似乎是更多字符,但应该扩展到其他范围。