我想在绘图中添加多个文本标签,其中包括一个表达式,该表达式产生一个斜体字符和一个值向量(存储在数据框中)。
我可以使用(例如)以下代码仅使用一个值来完成这项工作:
plot.new()
axis(1)
axis(2)
text( c(0.5, 0.5), c(0.8, 0.4),
expression(paste(italic(P),"-trend =", 0.01)) )
但是,当用值向量替换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))) )
没有给出正确的标签向量,但这是
由于向量在expression()
内部。我该如何进行这项工作?我对这个特定领域不了解,也许我错过了一种更明显的方法。
here也发布了类似的问题,但我无法将其推断出我的情况。
答案 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();
答案 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))
这也会产生预期的结果。