【问题标题】:Vectorize the legend in R矢量化 R 中的图例
【发布时间】:2018-06-24 13:02:01
【问题描述】:

我有一个问题,我有几个变量(先验我不知道有多少)。我想绘制它们并自动为它们添加一个图例。我这样做了,但是问题是我无法理解如何在此处添加表达式。我希望图例看起来像 $b_1$ 而不是 beta[1]。

我有一个矩阵:beta_tilde。我绘制它:

n <- 5
beta_tilde <- matrix(rnorm(100*n), nr = 100)

ts.plot(beta_tilde, ylim = c(min(beta_tilde), max(beta_tilde)), col = 1:n)
legend("topright" , legend = eval(substitute(paste("beta[", v,"]", sep = ""), list(v=1:n))), col=1:n, lty=1, cex=0.7)

【问题讨论】:

  • 您能否提供一个最小可重现的示例。干杯
  • 使用 bquote ....
  • @Henrik 谢谢,我添加了示例。
  • @Tjebo,对不起,我是新手,所以我不知道如何检查我的代码是否有错别字(这是一个错字)。不管怎样,我纠正了它,谢谢)
  • @Tjebo,你说得对,我只是忘了清理 R 中的环境。

标签: r plot legend


【解决方案1】:

substitute 不会返回长度大于 1 的表达式向量。无论如何,您使用 evalpaste 的方法都是错误的。你应该学习一些关于该语言的计算示例。

我发现for 循环在这里最简单:

leg <- vector("expression", n)
for (i in seq_len(n)) leg[[i]] <- substitute(beta[v], list(v = i))
legend("topright", legend = leg, col=1:n, lty=1, cex=0.7)

【讨论】:

  • 谢谢您的回答!
  • 我只是想知道是否可以按照我要求的矢量化版本执行此操作,而不使用 for 循环,因为这不是一个好方法?
  • 它有什么不好的地方?如果您不想看到 for 循环,请将其包装在一个函数中。这并不需要针对速度进行优化。
猜你喜欢
  • 2016-05-30
  • 2016-02-11
  • 1970-01-01
  • 2011-11-28
  • 2012-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-01
相关资源
最近更新 更多