R 图例变量替换

R Legend Variable Substitution

我一直希望我的 R 代码尽可能灵活;目前我有三个(可能更多)曲线可以根据参数 delta 进行比较,但我不想在任何地方硬编码 delta 的值(如果可以避免的话,甚至不想硬编码多少个值)。

我正在尝试制作一个图例,其中包含希腊语和增量值的变量替换,因此每个图例条目的形式类似于 'delta = 0.01',其中增量是希腊语,0.01 由变量确定.已经尝试了 pastesubstitutebquoteexpression 的许多不同组合,但最终总是在完成的图例中留下一些逐字代码,或者无法将 'delta'转换成符号形式。

delta <- c(0.01,0.05,0.1)
plot(type="n", x=1:5, y=1:5) #the curves themselves are irrelevant
legend_text <- vector(length=length(delta)) #I don't think lists work either
for(i in 1:length(delta)){
  legend_text[i] <- substitute(paste(delta,"=",D),list(D=delta[i]) )
}
legend(x="topleft", fill=rainbow(length(delta)), legend=legend_text)

由于 legend=substitute(paste(delta,"=",D),list(D=delta[1]) 适用于单个条目,我也尝试做一个 'semi-hardcoded' 版本,固定增量的长度:

legend(x="topleft", fill=rainbow(length(delta)),
       legend=c(substitute(paste(delta,"=",A), list(A=delta[1])),
                substitute(paste(delta,"=",B), list(B=delta[2])),
                substitute(paste(delta,"=",C), list(C=delta[3])) )
      )

但这和以前有同样的问题。

有什么方法可以做到这一点,还是我需要在每次更新 delta 时手动更改代码?

尝试使用 lapply()as.expression() 来生成图例标签。还可以使用 bquote 创建您的个人表达式

legend_text <- as.expression(lapply(delta, function(d) {
    bquote(delta==.(d))
} ))

请注意,对于 plotmath,您需要 == 才能获得等号。也不需要 paste() 因为这里没有真正的字符串。