缩放matplotlib文本艺术家以填充矩形面片边界框

ax6ht2ek  于 2023-02-09  发布在  其他
关注(0)|答案(1)|浏览(106)

在matplotlib中给定一个矩形面片和文本艺术家,是否可以缩放文本,使其尽可能好地填充矩形,而不会在任何维度上过度填充?
例如:

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")

生产

我想以编程方式重新缩放文本以适应矩形(包括降序),类似于使用试错法得到的结果:

我们可以假设一些简化约束,即图形大小和轴限制是已知的,并且提前设置,并且在此操作之后不需要更改。

t40tm48m

t40tm48m1#

根据文本的窗口范围与矩形的窗口范围之间的比较来缩放文本相对简单:

def rescale_text(rect, text):
    r = rect.get_window_extent()
    t = text.get_window_extent()
    scale = min(r.height / t.height, r.width / t.width)
    text.set_size(text.get_size() * scale)

但是,窗口范围高度似乎是基于字体而不是实际字符串计算的。因此,它正确地处理了下行字符,但即使它们不在字符串中,它也会继续处理,并且它不考虑所有“短”字符的字符串,例如:

虽然这对于我的应用程序来说可能还过得去,但如果有一种方法可以将文本范围收紧到实际绘制的范围,那将是理想的。

相关问题