python-3.x - Python 中 Matplotlib 中的响应式文本

标签 python-3.x matplotlib text

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

提前谢谢您!!!

最佳答案

您更新了 matplotlib.text.Text 的字体大小使用text.set_fontsize()。您可以使用 "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()

关于python-3.x - Python 中 Matplotlib 中的响应式文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39454275/

相关文章:

python - 单击按钮并按回车键时调用相同的函数

python - 从单个列表创建不规则的列表列表

python - __lt__ 实际为列表做了什么

Python、QT 和 matplotlib 散点图与 blitting

python - 使用 Python 更改 XML 文件中包含的文本的最佳方法是什么?

python - 连接 Pandas 日期时间

python - 读取 CSV 并绘制彩色折线图

python - 独立颜色条(matplotlib)

r - 使用 R 进行阿拉伯文本挖掘

file - SED 用文件中的可变行替换每个占位符