R图中文本边界的范围

时间:2011-10-11 17:39:26

标签: r

  

可能重复:
  finding the bounding box of plotted text

我有一个简单的情节,我在绘图区添加了一些文字;我想在这个文本周围加上边框。有没有办法获得实际文本的边界,以便我可以使用这些来绘制矩形,或者我只需要使用试验和错误来使矩形看起来正确吗?!

目前,我的代码是:

plot(dep, eqt[,1], type="l")
text(12,200,"A notes about this plot!", font=2, cex=2)
rect(10,140,14,260)

3 个答案:

答案 0 :(得分:3)

您可以使用strheightstrwidht来估算文字的高度和宽度。

健康警告: strheightstrwidth估算当前绘图设备中的文字大小。如果随后调整绘图大小,R可能会自动调整文本大小,但矩形不会调整大小。这适用于交互式绘图,但使用png(); plot(...); dev.off()

将绘图保存到磁盘时可能会出现问题
x <- 1:300
y <- 1:300
plot(x, y, type="l")

txt <- "A note about this plot!"
rwidth <- strwidth(txt, font=2, cex=2)
rheight <- strheight(txt, font=2, cex=2)

tx <- 150
ty <- 100

text(tx, ty,txt, font=2, cex=2, col="blue", offset=1)

rect(tx-0.5*rwidth, ty-0.5*rheight, tx+0.5*rwidth, ty+0.5*rheight)

enter image description here

答案 1 :(得分:2)

plotrix包具有可能对您有用的函数textbox()。尝试这样的事情:

require(plotrix)
txt <- "Some notes about this plot"
plot(1:5)
textbox(x = c(1, 1 + 1.1*strwidth(txt)),
        y = 4,
        textlist = txt)

答案 2 :(得分:0)

为了获得最大程度的控制,还可以使用grid包。特别是,可以在设备上渲染时绘制凹凸,确保考虑设备的尺寸调整。 gridBase包提供了混合基础和网格图形的功能。

grid.table的示例,其中包含drawDetails方法

 library(gridBase)
 library(gridExtra)

 par(oma=rep(1, 4), mfrow=c(1, 2), xpd=NA)
 plot(1:10, 1:10)
 vps <- baseViewports()
 pushViewport(vps$inner)
 pushViewport(vps$figure)
 pushViewport(vps$plot)
 ## grid.rect(gp=gpar(lwd=3, col="blue"))
 grid.table(expression("this is an expression"*integral(f(x)*dx, alpha, beta)),
            parse=TRUE, theme=theme.white(show.box=TRUE, separator = "red",
                          show.rownames = FALSE, show.colnames = FALSE))
 upViewport(0)