Python 中 Matplotlib 中的响应式文本

Iva*_*nov 3 text matplotlib python-3.x

我正在 Python 中使用 networkX 和 Matplotlib 开发一个简单的图形可视化工具。我还有一些用文本绘制的按钮。总体而言,设计是响应式的,这意味着当我调整窗口大小时,图形和按钮会缩放。然而,文本大小保持不变,这使得整个可视化工具在大小调整不够时看起来非常糟糕。你知道我怎样才能使文本也响应吗?

先感谢您!!!

Imp*_*est 5

matplotlib.text.Text您更新使用的字体大小text.set_fontsize()。您可以使用 a"resize_event"来调用设置新字体大小的函数。为了对图中的每个文本执行此操作,定义一个类来存储初始图形高度和字体大小,并在调整图形大小后更新字体大小,并按新的图形高度除以初始高度进行缩放,可能会有所帮助。

然后,您还可以定义最小可读字体大小,低于该字体大小的文本不应调整。

一个完整的例子:

import matplotlib.pyplot as plt
import numpy as np

class TextResizer():
    def __init__(self, texts, fig=None, minimal=4):
        if not fig: fig = plt.gcf()
        self.fig=fig
        self.texts = texts
        self.fontsizes = [t.get_fontsize() for t in self.texts]
        _, self.windowheight = fig.get_size_inches()*fig.dpi
        self.minimal= minimal

    def __call__(self, event=None):
        scale = event.height / self.windowheight
        for i in range(len(self.texts)):
            newsize = np.max([int(self.fontsizes[i]*scale), self.minimal])
            self.texts[i].set_fontsize(newsize)

fontsize=11
text = plt.text(0.7, 0.6, "Some text", fontsize=fontsize,
                bbox={'facecolor':'skyblue', 'alpha':0.5, 'pad':10})

cid = plt.gcf().canvas.mpl_connect("resize_event", TextResizer([text]))

plt.show()
Run Code Online (Sandbox Code Playgroud)