我有一个简单的情节,我在绘图区添加了一些文字;我想在这个文本周围加上边框。有没有办法获得实际文本的边界,以便我可以使用这些来绘制矩形,或者我只需要使用试验和错误来使矩形看起来正确吗?!
目前,我的代码是:
plot(dep, eqt[,1], type="l")
text(12,200,"A notes about this plot!", font=2, cex=2)
rect(10,140,14,260)
答案 0 :(得分:3)
您可以使用strheight
和strwidht
来估算文字的高度和宽度。
健康警告: strheight
和strwidth
估算当前绘图设备中的文字大小。如果随后调整绘图大小,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)
答案 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)