你能计算出文本注释的大小吗?

2023-12-08

我想计算数据坐标中 matplotlib 中文本标签的大小(高度和宽度),以便我可以按其自身的大小将其沿某个方向移动。理想情况下,我想在绘制之前知道尺寸。

import matplotlib.pylab as pylab
pylab.figure()
x, y = 5, 7
text = 'label'
pylab.plot(x, y, 'k.')
pylab.text(x, y, text, color='red')
pylab.show()

在上面的示例中,标签出现在该点上,我想按照数据坐标中的大小将其移动到某个方向。

编辑:请阅读答案中有关不同操作系统的评论。

EDIT:

尝试过:

import matplotlib.pylab as pylab
fig = pylab.figure()
x, y = 5, 7
text = 'label'
pylab.plot(x, y, 'k.')
t = pylab.text(x, y, text, color='red')
fig.canvas.draw()
bbox = t.get_window_extent(renderer = pylab.gcf().canvas.get_renderer())
pylab.plot([bbox.x0, bbox.x1, bbox.x1, bbox.x0, bbox.x0], [bbox.y0, bbox.y0, bbox.y1, bbox.y1, bbox.y0], 'r-')
pylab.show()

enter image description here

如果我使用:

pylab.plot([bbox.x0, bbox.x1, bbox.x1, bbox.x0, bbox.x0], [bbox.y0, bbox.y0, bbox.y1, bbox.y1, bbox.y0], 'g-', transform=None)

我没有看到边界框

enter image description here


您可以通过以下方式获取文本大小get_window_extent文本对象的。这将返回显示坐标(即像素)中文本的边界框,但要获取像素位置,您显然首先需要绘制文本。这样做是通过canvas.draw缓存渲染器,因此您不需要提供渲染器get_window_extent(适用于 Windows 和 Linux,对于 macOS,请参阅下面的更新 3)。

import matplotlib.pylab as pylab

fig = pylab.figure()
x, y = 5, 7
text = 'label'
pylab.plot(x, y, 'k.')

t = pylab.text(x, y, text, color='red')
fig.canvas.draw()
print(t.get_window_extent())

pylab.show()

在我的设置中这会导致

Bbox(x0=328.0, y0=234.60000000000036, x1=361.75, y1=248.60000000000036)

Update(见下面的评论):

import matplotlib.pylab as pylab
fig = pylab.figure()
x, y = 5, 7
text = 'label'
pylab.plot(x, y, 'k.')
t = pylab.text(x, y, text, color='red')
fig.canvas.draw()
bbox = t.get_window_extent()
pylab.plot([bbox.x0, bbox.x1, bbox.x1, bbox.x0, bbox.x0], 
           [bbox.y0, bbox.y0, bbox.y1, bbox.y1, bbox.y0],
           'r-',
           transform=None)
pylab.show()

更新2:为了让bbox进入数据坐标,您可以使用inverted轴变换,但在添加框之前必须修复 x 和 y 轴限制,否则会触发轴的重新缩放。

import matplotlib.pylab as pylab

fig = pylab.figure()
x, y = 5, 7
text = 'label'
pylab.plot(x, y, 'k.')

xl, yl = pylab.xlim(),pylab.ylim()
t = pylab.text(x, y, text, color='red')

fig.canvas.draw()
bbox = pylab.gca().transData.inverted().transform_bbox(t.get_window_extent())
pylab.plot([bbox.x0, bbox.x1, bbox.x1, bbox.x0, bbox.x0], 
           [bbox.y0, bbox.y0, bbox.y1, bbox.y1, bbox.y0],
           'r-')

pylab.xlim(xl)
pylab.ylim(yl)
pylab.show()

enter image description here


更新3:对于 macOS,您需要显式地将渲染器传递给get_windows_extent (see here),即上述示例仅在 Windows 和 Linux 上按原样运行。以下内容适用于所有系统:

import matplotlib.pylab as pylab

fig = pylab.figure()
x, y = 5, 7
text = 'label'
pylab.plot(x, y, 'k.')

xl, yl = pylab.xlim(),pylab.ylim()
t = pylab.text(x, y, text, color='red')

renderer = fig.canvas.get_renderer()
bbox = pylab.gca().transData.inverted().transform_bbox(t.get_window_extent(renderer))
pylab.plot([bbox.x0, bbox.x1, bbox.x1, bbox.x0, bbox.x0], 
           [bbox.y0, bbox.y0, bbox.y1, bbox.y1, bbox.y0],
           'r-')

pylab.xlim(xl)
pylab.ylim(yl)
pylab.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

你能计算出文本注释的大小吗? 的相关文章

  • Python 的键盘中断不会中止 Rust 函数 (PyO3)

    我有一个使用 PyO3 用 Rust 编写的 Python 库 它涉及一些昂贵的计算 单个函数调用最多需要 10 分钟 从 Python 调用时如何中止执行 Ctrl C 好像只有执行结束后才会处理 所以本质上没什么用 最小可重现示例 Ca
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 使用 matplotlib 绘制时间序列数据并仅在年初显示年份

    rcParams date autoformatter month b n Y 我正在使用 matpltolib 来绘制时间序列 如果我按上述方式设置 rcParams 则生成的图会在每个刻度处标记月份名称和年份 我怎样才能将其设置为仅在每
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 以编程方式停止Python脚本的执行? [复制]

    这个问题在这里已经有答案了 是否可以使用命令在任意行停止执行 python 脚本 Like some code quit quit at this point some more code that s not executed sys e
  • OpenCV 无法从 MacBook Pro iSight 捕获

    几天后 我无法再从 opencv 应用程序内部打开我的 iSight 相机 cap cv2 VideoCapture 0 返回 并且cap isOpened 回报true 然而 cap grab 刚刚返回false 有任何想法吗 示例代码
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 在Python中获取文件描述符的位置

    比如说 我有一个原始数字文件描述符 我需要根据它获取文件中的当前位置 import os psutil some code that works with file lp lib open path to file p psutil Pro
  • 在f字符串中转义字符[重复]

    这个问题在这里已经有答案了 我遇到了以下问题f string gt gt gt a hello how to print hello gt gt gt f a a gt gt gt f a File
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 如何在seaborn displot中使用hist_kws

    我想在同一图中用不同的颜色绘制直方图和 kde 线 我想为直方图设置绿色 为 kde 线设置蓝色 我设法弄清楚使用 line kws 来更改 kde 线条颜色 但 hist kws 不适用于显示 我尝试过使用 histplot 但我无法为
  • 绘制与Fig.show()内联的IPython Notebook图形?

    我正在使用 IPython Notebook 调用内联模式 pylab inline 以下代码立即在单元格处绘制一个图形 fig plt figure axes fig add axes 0 0 1 1 不过 我想在一个单元格中创建绘图 轴
  • Scrapy:如何使用元在方法之间传递项目

    我是 scrapy 和 python 的新手 我试图将 parse quotes 中的项目 item author 传递给下一个解析方法 parse bio 我尝试了 request meta 和 response meta 方法 如 sc
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2
  • Statsmodels.formula.api OLS不显示截距的统计值

    我正在运行以下源代码 import statsmodels formula api as sm Add one column of ones for the intercept term X np append arr np ones 50

随机推荐

  • 限制可以上传的文件数量

    如何限制可以上传的文件数量 The max验证似乎适用于图像的大小 以千字节为单位 如何验证允许上传的最大文件数 例如 单个输入只能上传 10 个文件 我在 Laravel 7 x 中的表现如何 使用以下命令创建一个新的表单请求类 php
  • 需要替代的 Python 列表反向解决方案

    我今天参加了一个工作面试 在此期间 我被要求写下一个反转列表的算法 首先我使用reverse 方法提供了答案 x 1 2 3 4 5 y reversed x for i in y print i 进行面试的高级开发人员问我是否知道另一种方
  • 如何在 C# 中以编程方式将 xlsx 文件转换为 2003 xls 文件?

    我找到了Excel包 一个比 Excel Interop API 更好的库 用于以编程方式创建和维护 Excel 工作表 但它们是在 xlsx 中生成的 大多数看到这些文件的人只安装了 Office 2003 因此我需要在我的 C 代码中将
  • 如何将“Mon Jun 18 00:00:00 IST 2012”转换为 18/06/2012?

    我有一个像下面这样的值Mon Jun 18 00 00 00 IST 2012我想将其转换为18 06 2012 如何转换这个 我尝试过这个方法 public String toDate Date date SimpleDateFormat
  • 上传到 FTP 时保留图像创建日期

    因此 我正在为我的家人制作一个网站 我们可以在其中上传图像并查看它们 但该网站的一个重要功能是按日期排序 以便例如我的阿姨在我母亲的生日时拍了照片 而我也有拍摄照片 我们上传图像 它们将添加到同一相册等 我意识到通过浏览器上传时无法保留日期
  • jqGrid - 在网格中不提供数据消息?

    如果当前搜索没有返回数据 我们将使用loadComplete回调向用户打印一条消息 表明没有数据 有没有办法配置 jqGrid 以在网格内打印出 无数据 消息 目前我们将其打印在div在网格上方 但希望它位于实际网格内 jqGrid 显示
  • Apache AGE-如何实现两个图之间的关系

    如果我们有 2 个图数据库 A 和 B 并且当前节点 A 图数据库和 B 图数据库之间没有关系 现在我必须在 A 节点和 B 节点之间添加关系 那么如何我使用 AGE 来做到这一点 例如 A 可以是员工图数据库 B 可以是任何汽车经销商图数
  • 按词汇顺序查找总和为给定数字的千组

    较大的数字可以采用逗号格式 以便更容易地分为三个一组 例如 1050 1 050 and 10200 10 200 每三组的总和为 1050 1 050 gives 1 50 51 10200 10 200 gives 10 200 210
  • 创建像 TextLine 这样的 Scalding Source,将多个文件组合到单个映射器中

    我们有许多小文件需要合并 在烫伤中你可以使用TextLine将文件作为文本行读取 问题是我们有 1 个映射器per file 但我们想要合并多个文件 以便它们由 1 个映射器处理 我知道我们需要将输入格式更改为实现CombineFileIn
  • 使用 Dropwizard 0.7.0 实现长轮询服务器

    我正在尝试使用 Dropwizard 0 7 0 框架实现长轮询服务器 有人建议我使用码头集成 经过一番谷歌搜索后 我对 websockets jetty continuation cometd 之类的东西感到非常困惑 我的问题是 这些东西
  • 从 URL 打开 PDF

    我是android开发的新手 我必须显示来自 URL 的 PDF 这是我当前的代码 但我无法显示 PDF 文件 public class TestActivity extends Activity public void onCreate
  • 查询查找所有非零毫秒的文档

    有大量的收藏transaction文档 2M Each transaction文档有一个source billDate field source billDate ISODate 2018 07 23T16 02 06 797Z or so
  • Twitter Bootstrap:将导航选项卡与 div 底部对齐

    我正在建立一个网站 这是我第一次使用 Twitter 引导程序 我正在尝试将菜单与 div 底部对齐 但由于某种原因我不知道该怎么做 我做了一些研究并尝试使用 box align 属性 但这没有用 这是我的代码 div class row
  • 使用 Nodejs 避免 Promise 中的回调地狱

    我已经使用 Promise 在 Node js 中编写了大约六个函数 我真的想发布所有这些代码 而不是发布一个模拟示例 这样我就可以简洁地封装我的问题 所以说我有以下两个功能 foo gt return new Promise r rj g
  • 在一个轴上应用两个变换

    我已经发现coord trans 但我想申请log10 and reverse到我的x轴 我尝试应用两种变换 ggplot table aes color Vowel x F1 y F2 geom point coord trans x l
  • 当链接在新选项卡中打开时如何留在当前窗口?

    当用户点击链接时 a href http www stackoverflow com target blank click a 有没有办法留在当前窗口而不是转到选项卡 我猜 target blank 会打开新选项卡 Windows 但也会切
  • 推送配置更改后,Gitosis 不更新服务器配置

    我已经使用提供的教程设置了 gitosis http scie nti st 2007 11 14 hosting git repositories the easy and secure way 我发现在 gitosis conf 中添加
  • 如何通过ajax向Perl脚本发送数据?

    我想通过 ajax 将数据发送到 Perl 脚本 并从它接收 json 格式 但这不起作用 我知道以下脚本中有问题 有谁知道如何修理它 jQuery 代码 test click function var ID 100 var data da
  • 帮助构建一个基本的 php 搜索引擎

    我到处寻找教程 但似乎找不到好的教程 具有分页 列标题排序和多重过滤的搜索页面 过滤器位于复选框中 问题 分页工作 排序工作 但无法让它们一起工作 添加到使过滤器与分页和排序的结果集一起使用 我想单独使用 php 和 GET 表单方法来完成
  • 你能计算出文本注释的大小吗?

    我想计算数据坐标中 matplotlib 中文本标签的大小 高度和宽度 以便我可以按其自身的大小将其沿某个方向移动 理想情况下 我想在绘制之前知道尺寸 import matplotlib pylab as pylab pylab figur