【问题标题】:Using an expression in plot text - Printing the value of a variable rather than its name在绘图文本中使用表达式 - 打印变量的值而不是其名称
【发布时间】:2012-12-28 18:48:41
【问题描述】:

我正在尝试获取一个包含指数的标签。这是我的代码

vall = format(cor(x,y)*cor(x,y),digits=3)
eq <- expression(paste(R^2," = ",vall,sep=""))
text(legend.x,legend.y,eq,cex=1,font=2)

但文字看起来像这样

如何显示实际的 vall(而不是文本“vall”)

【问题讨论】:

  • 我不认为这是重复的,但这篇文章的标题有点误导。我可以建议重新格式化标题以反映问题,因为指数似乎真的不是你的问题。
  • sep="" 在这里什么都不做(附加一个空字符串)。这不是base::paste,而是plotmath。在这里不会受到伤害,但如果指定了非空字符串,则不会做你想做的事情。

标签: r plot


【解决方案1】:

试试bquote(),例如:

set.seed(1)
vall <- format(rnorm(1),digits=3)
eq <- bquote(bold(R^2 == .(vall)))
sq <- seq(0, 1, by = 0.1)
plot(sq, sq, type = "n")
text(0.5, 0.5, eq)

您的示例不起作用的原因是 R 永远不会评估 vall

> eq2 <- expression(paste(R^2," = ",vall,sep=""))
> eq2
expression(paste(R^2, " = ", vall, sep = ""))

plotmath 试图从中做出一些事情,但基本上 vall 是按字面意思理解的。

一般来说,绘图表达式中不需要paste(),您可以使用标准运算符和布局运算符构建表达式。例如,对于与您的示例生成的表达式等效的表达式(未评估的vall),您真正需要的是:

expression(R^2 == vall)

bquote() 是一种在表达式中将对象替换为其值的方法。您将要替换的对象包装为.( ) 中的值。然后,R 将查找对象并获取其值并将其插入到表达式中。

另请参阅substitute(),了解使用不同界面的替代方法。

【讨论】:

  • @CodeGuy Re expression(R^2 == vall) 抱歉,如果我不清楚;我的意思是使用expression() 来获得与您的示例相同的行为(即vall 包括字面意思)。这是为了说明您不需要paste() 来处理这些事情。 bquote()substitute() 需要将 vall 替换为其值。
  • 如果要添加一些明文怎么办?我正在使用表达式来模拟 ggplot2 中的字幕(请参阅stackoverflow.com/a/14668651/210945),我想做类似ggtitle(expression(atop(paste('Qg_obs vs Qg_sim for', model, 'at site', dataset), atop('colour represents angle from one point to the next', '')) 的事情,但我找不到让它工作的方法。试过.() 和 bquote 和替换,但我想不通。
猜你喜欢
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 2014-04-28
  • 1970-01-01
  • 1970-01-01
  • 2013-07-12
  • 2022-06-15
  • 2011-05-24
相关资源
最近更新 更多