【问题标题】:Extent of boundary of text in R plot [duplicate]R图中文本边界的范围[重复]
【发布时间】:2011-10-12 07:57:07
【问题描述】:

可能重复:
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)

【问题讨论】:

  • 哎呀,对不起 - 是的可能;当我搜索答案时没有看到。

标签: r


【解决方案1】:

您可以使用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)

【讨论】:

  • 这正是我想要的——谢谢!
【解决方案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)

【讨论】:

  • 这看起来也是一个有趣的解决方案。它是否克服了 Andrie 在使用 strwidth / strheight 时警告的问题?
  • 它似乎工作正常,我不明白为什么它不会。我不太明白为什么当您绘制到 非交互式 绘图设备之一时,影响 交互式 调整大小的问题会成为问题。 (但我很想知道为什么会这样)。
  • 这确实有同样的问题。我强调的问题与交互使用本身无关。这是使用当前绘图设备计算文本框大小。如果您随后打印到绘图设备并指定恰好与当前绘图设备不同的高度和宽度,则该框将不再是正确的大小。
  • 但是如果你这样做应该不是问题:png("eg.png"); plot(...); dev.off(),其中“plot(...)”是我上面代码框中的所有命令,对吧?因为在这种情况下,计算宽度等时处于活动状态的设备将是合适的设备(即由png() 打开的设备)。我想你所指的问题是我很久以前从我的 R 词典中删除 dev.copy() 的原因!
【解决方案3】:

为了最大限度地控制,grid 包也可以使用。特别是,可以在设备上渲染时绘制 grobs,确保考虑到设备的大小调整。 gridBase 包提供了混合基本图形和网格图形的功能。

一个带有 drawDetails 方法的 grid.table 示例,

 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    • 1970-01-01
    • 2022-06-20
    • 1970-01-01
    • 2016-04-06
    相关资源
    最近更新 更多