gpt4 book ai didi

python - Matplotlib 文本边界框尺寸

转载 作者:太空狗 更新时间:2023-10-29 22:26:17 25 4
gpt4 key购买 nike

我想做什么:

我想以 matplotlib 世界单位(而不是屏幕像素)获取文本实例的位置和尺寸,以计算和防止文本重叠。

我正在 Mac OSX 10.9.3、Python 2.7.5、matplotlib 1.3.1 上进行开发。

我尝试过的:

t 成为一个文本实例。

  1. t.get_window_extent(renderer) :

    这会获取以像素为单位的边界框尺寸,我需要世界坐标(在我的例子中标准化为 -1.0 和 1.0 之间)。

  2. t._get_bbox_patch():

    t = ax.text(x, y, text_string, prop_dict, bbox=dict(facecolor='red', alpha=0.5, boxstyle='square'))
    print t._get_bbox_patch()

    当我执行上面的序列时,输出是 FancyBboxPatchFancyBboxPatch(0,0;1x1)。在我生成的图像中,文本实例使用红色边界框正确渲染,因此输出让我认为 FancyBbox 已实例化,但在渲染时才实际填充实际尺寸。

那么,我如何才能获得文本实例边界框的位置和尺寸,使用与我传递的 xy 参数相同的坐标系单位到 ax.text(...)?

最佳答案

这可能有点帮助。

import matplotlib.pyplot as plt

f = plt.figure()
ax = f.add_subplot(111)
ax.plot([0,10], [4,0])
t = ax.text(3.2, 2.1, "testing...")

# get the inverse of the transformation from data coordinates to pixels
transf = ax.transData.inverted()
bb = t.get_window_extent(renderer = f.canvas.renderer)
bb_datacoords = bb.transformed(transf)

# Bbox('array([[ 3.2 , 2.1 ],\n [ 4.21607125, 2.23034396]])')

这应该给你想要的。如果您想获得图形坐标 (0..1,0..1) 的坐标,请使用 ax.transAxes 的逆函数。

但是,此解决方案中有一个小问题。 matplotlib 文档的摘录:

任何 Text 实例都可以报告其在窗口坐标中的范围(负 x 坐标在窗口外),但存在摩擦。

用于计算文本大小的 RendererBase 实例在绘制图形 (draw()) 之前是未知的。在绘制窗口并且文本实例知道其渲染器后,您可以调用 get_window_extent()。

所以,在真正绘制图形之前,似乎没有办法找出文字大小。

顺便说一句,你可能已经注意到 Bbox 实例有方法 overlaps 可以用来找出 Bbox 是否与另一个重叠一个 (bb1.overlaps(bb2))。这在某些情况下可能有用,但它没有回答“多少”的问题。

如果您旋转了文本,您将很难看出它们是否重叠,但您可能已经知道这一点。

关于python - Matplotlib 文本边界框尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24581194/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com