向量化绘图的串联文本标签

时间:2018-09-23 11:22:12

标签: r plot text

我想在绘图中添加多个文本标签,其中包括一个表达式,该表达式产生一个斜体字符和一个值向量(存储在数据框中)。

我可以使用(例如)以下代码仅使用一个值来完成这项工作:

plot.new()
axis(1)
axis(2)

text( c(0.5, 0.5), c(0.8, 0.4), 
expression(paste(italic(P),"-trend =", 0.01)) )

enter image description here

但是,当用值向量替换0.01时,我无法做到这一点。例如,以下

plot.new()
axis(1)
axis(2)

text( c(0.5, 0.5), c(0.8, 0.4), 
expression(paste(italic(P),"-trend =", c(0.01, 0.001))) )

没有给出正确的标签向量,但这是

enter image description here

由于向量在expression()内部。我该如何进行这项工作?我对这个特定领域不了解,也许我错过了一种更明显的方法。

here也发布了类似的问题,但我无法将其推断出我的情况。

2 个答案:

答案 0 :(得分:1)

您可以将expression交换为bquote,而italic的用法与.()不同,并允许使用plot.new(); axis(1); axis(2) txt <- list(x = c(0.5, 0.5), y = c(0.8, 0.4), vals = c(0.01, 0.001)) for(i in 1:length(txt$vals)){ text(x = txt$x[i], y = txt$y[i], labels = bquote(paste(italic("P"), "-trend = ", .(txt$vals[i])))) } 来评估对象。我发现了这种用法here。然后,我使用for循环作为所需矢量化功能的解决方法。

$categories = DB::table('categroys')->get();

example plot

答案 1 :(得分:1)

@Evan的解决方案效果很好,但是由于他的回答以及在SO上找到的其他解决方案,我设法使用sapply()将其矢量化,从而消除了for循环的需要。

plot.new()
axis(1)
axis(2)

plabs <- function(x) as.expression(bquote(italic(P)~ "-trend =" ~ .(x) ))
text(c(0.5, 0.5), c(0.8, 0.4), labels = sapply(c(0.01, 0.001), plabs))

这也会产生预期的结果。