python – Matplotlib文本边界框尺寸
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – Matplotlib文本边界框尺寸,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1786字,纯文字阅读大概需要3分钟。
内容图文
![python – Matplotlib文本边界框尺寸](/upload/InfoBanner/zyjiaocheng/705/39b5d86aa3d043eea02e3e37c27ec638.jpg)
我想做的事:
我想在matplotlib世界单位(而不是屏幕像素)中获取文本实例的位置和尺寸,以计算和防止文本重叠.
我正在开发Mac OSX 10.9.3,Python 2.7.5,matplotlib 1.3.1.
我尝试过的:
设t为文本实例.
> t.get_window_extent(renderer):
这得到了以像素为单位的边界框尺寸,我需要世界坐标(在我的情况下归一化在-1.0和1.0之间).
> 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; ??1×1).在我生成的图像中,文本实例使用红色边界框正确渲染,因此输出使我认为FancyBbox已实例化,但在渲染时间之前实际上并未填充实际尺寸.
那么,我怎样才能获得文本实例边界框的位置和尺寸,这些坐标系在我用于传递给ax.text(…)的x和y参数的相同坐标系统单元中?
解决方法:
这可能会有所帮助.
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实例有方法重叠,可以用来找出Bbox是否与另一个重叠(bb1.overlaps(bb2)).这在某些情况下可能有用,但它没有回答“多少”这个问题.
如果您有旋转的文本,您将很难看到它们是否重叠,但您可能已经知道了.
内容总结
以上是互联网集市为您收集整理的python – Matplotlib文本边界框尺寸全部内容,希望文章能够帮你解决python – Matplotlib文本边界框尺寸所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。