You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Matplotlib中缩放文本艺术家以填充矩形补丁边界框?

在Matplotlib中让文本自动缩放适配矩形补丁

当然可以实现。我们可以通过计算文本与矩形的像素尺寸比例,动态调整字体大小,让文本在不超出矩形边界的前提下尽可能放大,同时包含下行字母(比如示例中的"yellow"里的y)。

完整实现代码

import matplotlib as mpl
import matplotlib.pyplot as plt

f, ax = plt.subplots()
ax.set(xlim=(0, 6), ylim=(0, 3))

x0, y0 = 1, 1
x1, y1 = 5, 1.5
width = x1 - x0
height = y1 - y0
    
rect = mpl.patches.Rectangle((x0, y0), width, height, fc="none", ec="y")
ax.add_patch(rect)

text = ax.text(x0 + width / 2, y0 + height / 2, "yellow", ha="center", va="center")

def resize_text_to_fit_rect(text, rect, ax, padding=0.05):
    # 获取画布渲染器,用于计算准确的文本显示尺寸
    renderer = ax.figure.canvas.get_renderer()
    
    # 将矩形的轴坐标转换为窗口像素坐标,计算矩形的像素宽高
    rect_pixels = ax.transData.transform([(x0, y0), (x1, y1)])
    rect_width_pix = rect_pixels[1, 0] - rect_pixels[0, 0]
    rect_height_pix = rect_pixels[1, 1] - rect_pixels[0, 1]
    
    # 获取当前文本的完整显示范围(包含下行字母的整个边界框)
    text_bbox = text.get_window_extent(renderer=renderer)
    text_width_pix = text_bbox.width
    text_height_pix = text_bbox.height
    
    # 计算宽、高方向的最大缩放比例,取较小值避免超出矩形
    # padding参数控制文本与矩形边框的内边距,避免贴边
    scale_x = (rect_width_pix * (1 - padding)) / text_width_pix
    scale_y = (rect_height_pix * (1 - padding)) / text_height_pix
    scale_factor = min(scale_x, scale_y)
    
    # 应用新的字体大小
    text.set_fontsize(text.get_fontsize() * scale_factor)

# 调用缩放函数,设置5%内边距
resize_text_to_fit_rect(text, rect, ax, padding=0.05)

plt.show()

关键逻辑说明

  1. 坐标转换:将矩形的轴坐标转换为窗口像素坐标,确保我们在同一个坐标系下对比文本和矩形的尺寸。
  2. 文本边界获取:使用get_window_extent(renderer)获取文本的完整显示边界,这个边界包含了下行字母(如y、g)的底部部分,避免只计算基线以上的高度导致文本超出矩形。
  3. 缩放比例计算:分别计算宽、高方向的最大允许缩放比例,取两者的最小值,保证文本在两个维度上都不会超出矩形。
  4. 内边距控制:通过padding参数预留一定的空白,让文本和矩形边框之间有间隙,提升视觉效果。

内容的提问来源于stack exchange,提问作者mwaskom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 15:05:32