我总是希望我的R代码尽可能灵活;目前我有三条(可能更多)曲线可以根据参数增量进行比较,但我不想在任何地方对delta值进行硬编码(如果可以避免,也可以修改多少值)。
我正在尝试创建一个涉及希腊语和变量替换delta值的图例,因此每个图例条目的形式类似于'delta = 0.01',其中delta是希腊语,0.01是由变量确定的。已尝试过paste
,substitute
,bquote
和expression
的许多不同组合,但最终会在完成的图例中留下一些逐字代码,或者无法放置' 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])
适用于单个条目,我还尝试了一个“半硬编码”版本,修复了delta的长度:
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时手动更改代码?
答案 0 :(得分:1)
尝试将lapply()
与as.expression()
一起使用以生成图例标签。还可以使用bquote
创建单个表达式
legend_text <- as.expression(lapply(delta, function(d) {
bquote(delta==.(d))
} ))
请注意,使用plotmath,您需要==
才能获得等号。也不需要paste()
因为这里没有任何字符串。