【问题标题】:R Legend Variable SubstitutionR 图例变量替换
【发布时间】:2017-09-27 15:10:46
【问题描述】:

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

我正在尝试制作一个涉及希腊语和变量替换 delta 值的图例,因此每个图例条目的形式类似于“delta = 0.01”,其中 delta 是希腊语,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]) 适用于单个条目,我还尝试了一个“半硬编码”版本,修复了增量的长度:

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 时手动更改代码?

【问题讨论】:

    标签: r variables legend substitution


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 2022-07-21
      • 1970-01-01
      • 2015-08-23
      相关资源
      最近更新 更多