Python/Matplotlib - 在wxPython中设置图形边框

3
我在wxpython面板上有一个matplotlib图像。我的应用程序是实时运行的,用户可以调整窗口大小。但是当这种情况发生时,我的坐标轴周围的边框会出现问题。
我知道可以使用fig.subplots_adjust函数来调整边框,但是该函数中指定的值是百分比,因此当最大化时会浪费大量空间,尽管当窗口较小时空间正好合适。
是否有类似于此函数的东西,我可以在像素等单位中指定边框大小,以便无论框架大小如何,边框宽度都相同?
一如既往,感谢!
1个回答

6

以下是如何完成此操作的示例。 该代码定义了一个函数,它将像素边框值根据当前图形大小转换为百分比。 它还连接了一个事件侦听器,以在调整图形大小时调整边框:

import numpy
import matplotlib.pyplot as plt

def adjust_borders(fig, targets):
    "Translate desired pixel sizes into percentages based on figure size."
    dpi = fig.get_dpi()
    width, height = [float(v * dpi) for v in fig.get_size_inches()]
    conversions = {
        'top': lambda v: 1.0 - (v / height),
        'bottom': lambda v: v / height,
        'right': lambda v: 1.0 - (v / width),
        'left': lambda v: v / width,
        'hspace': lambda v: v / height,
        'wspace': lambda v: v / width,
        }
    opts = dict((k, conversions[k](v)) for k, v in targets.items())
    fig.subplots_adjust(**opts)

fig = plt.figure(figsize=(7, 5))
for i in range(4):
    ax = fig.add_subplot(2, 2, i+1)
    ax.plot([1,2,3], [4,5,1])
    ax.set_xticks([])
    ax.set_yticks([])

# target sizes in pixels.
targets = dict(left=10, right=10, top=10, bottom=30, hspace=30, wspace=30)
# hook up a function to adjust the borders when the window is resized
fig.canvas.mpl_connect('resize_event', lambda e: adjust_borders(fig, targets))
adjust_borders(fig, targets)
plt.show()

太棒了,谢谢。我希望有一个内置函数可以为我们基本上完成这个操作(似乎这是一个常见的请求?),但这也很好用。 - Scott B
很棒,很高兴它有帮助。我同意应该内置此功能 - 当我将绘图渲染为PNG格式时,以像素为单位设置大小更容易,当更改分辨率时必须重新计算百分比有点麻烦。 - samplebias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接