如何在`bquote`表达式中使用`text`表示新行?

时间:2013-03-27 15:57:57

标签: r data-visualization plotmath

我想在我的bquote环境中换一个新行,我该怎么做?

我的代码:

test<-c(1,2,3,4,4.5,3.5,5.6)
test2<-0.033111111
plot(test,c(1:length(test)))

segments(4,0,4,23,col="red",lwd=2)
text(5, 4.5, labels = bquote(Qua[0.99] == .(round(test2,4))),col="red", cex = 1.4)

我希望在等号后面有一个新行,所以这应该给出:

VaR_0.99 =

0.03311

and not

    VaR_0.99 = 0.03311

我用线条试了一下,但它不起作用:

    test<-c(1,2,3,4,4.5,3.5,5.6)
    test2<-0.033111111
    lines<-list(bquote(Qua[0.99] == ),bquote(.(round(test2,4))))
    plot(test,c(1:length(test)))

    segments(4,0,4,23,col="red",lwd=2)
    text(5, 4.5, labels =lines ,col="red", cex = 1.4)

3 个答案:

答案 0 :(得分:7)

上面提到了其中一个错误。 R表达式被解析,因此它们需要在语法上有效。由于“==”是一个双参数函数,因此它不能是表达式中的最后一项。 phantom函数用作非打印的占位符。也可能是一个空字符值("")。由于没有需要评估的“外部”值,我只使用expression()而不是bquote()作为表达式列表中的第一个参数。

另一个更像是语义错误,而不是语法错误。您需要为第二个bquote表达式提供明确的y位置。几乎所有文本的重要参数都是矢量能力的,但似乎没有对y值进行隐式向上(或向下)索引:

test <- c(1, 2, 3, 4, 4.5, 3.5, 5.6)
test2 <- 0.033111111
lines <- c( expression(Qua[0.99] == phantom(0)) ,
           bquote(.(round(test2,4)))
          )
plot(test,c(1:length(test)))

segments(4,0,4,23,col="red",lwd=2)
text(5, c(4.5, 4), labels =lines ,col="red", cex = 1.4)

enter image description here

我过去曾经使用atop建议,甚至在Rhelp上提出建议,但我认为上面的方法可以更好地概括为三个或更多表达式,并允许更多地控制定位。 atop也会默默地减少字体大小,因此如果您使用嵌套的atop路由进行三个表达式任务,则可能需要atop( atop(..., ...), atop(..., phantom() )来保持大小均匀。

答案 1 :(得分:5)

例如,使用atop

test<-c(1,2,3,4,4.5,3.5,5.6)
test2<-0.033111111
plot(test,c(1:length(test)))

segments(4,0,4,23,col="red",lwd=2)
text(5, 4.5, 
     labels = bquote(atop(Qua[0.99] == phantom(), .(round(test2,4)))),
     col="red", cex = 1.4)

enter image description here

答案 2 :(得分:0)

我想要这个,但保持对齐。搜索解决方案后,我最终使用了两个text()调用,设置为将文本分开0.25英寸,从顶部放入0.25英寸,而不考虑绘图尺寸。

plot(1:100)
r2 <- 40.2
rmse <- 0.6
ll = bquote(paste(italic(R)^2," = ",.(r2),"  RMSE = ",.(rmse)))
val=0.25*diff(par('usr')[3:4])/par('pin')[2]
text(par('usr')[1], par('usr')[4] - val, pos=4, labels=ll)
text(par('usr')[1], par('usr')[4] - 2*val, pos=4, labels="Model A")

Image produced by code