【问题标题】:finding the bounding box of plotted text找到绘制文本的边界框
【发布时间】:2011-06-04 02:34:44
【问题描述】:

我想在绘图上抖动文本以避免过度绘图。为此,我假设我需要一个围绕文本组件的边界框。有没有办法得到这个?

例如,在基础图形中:

plot.new()
text(.5,.5,"word")
text(.6,.5,"word") #does this overlap?

在网格中有一种删除重叠文本的方法,但我似乎无法找到一种方法来访问确定是否发生重叠的代码。

grid.text(c("word","other word"),c(.5,.6),c(.5,.5),check=T)

【问题讨论】:

    标签: r


    【解决方案1】:

    也许strwidth 和strheight 函数可以在这里提供帮助

    stroverlap <- function(x1,y1,s1, x2,y2,s2) {
      sh1 <- strheight(s1)
      sw1 <- strwidth(s1)
      sh2 <- strheight(s2)
      sw2 <- strwidth(s2)
    
      overlap <- FALSE
      if (x1<x2) 
        overlap <- x1 + sw1 > x2
      else
        overlap <- x2 + sw2 > x1
    
      if (y1<y2)
        overlap <- overlap && (y1 +sh1>y2)
      else
        overlap <- overlap && (y2+sh2>y1)
    
      return(overlap)
    }
    stroverlap(.5,.5,"word", .6,.5, "word")
    

    【讨论】:

    • 好吧,也许几乎完美。它没有得到正确的小写“p”的尾部。
    • 这假定坐标位于每个文本的左下角。 R 中的text() 是这样吗?还是它实际上位于文本的中间?如果后者是真的,这仍然有效吗?
    【解决方案2】:

    包maptools有一个名为pointLabel的函数。

    使用优化例程找到好的 没有点标签的位置 重叠。

    【讨论】:

      【解决方案3】:

      如果您使用基本图形,它将是 thigmophobe {plotrix}

      “寻找离最近点的方向”

      使用 lattice,Harrell 提供了:

      labcurve {Hmisc}

      “标注曲线、制作关键点以及交互绘制点和曲线”

      【讨论】:

      • 我不明白如何使用其中任何一个来确定两条文本是否重叠。
      • 它们不能,但它们通常是做这类事情的有用工具。不直接回答您的问题,但对于将来在这里浏览的其他人可能会很方便。 labcurve 特别有一些用于绘制标签同时避免过度绘制的机制
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多