首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >matplotlib savefig bbox_inches =‘紧密’不会忽略不可见的轴

matplotlib savefig bbox_inches =‘紧密’不会忽略不可见的轴
EN

Stack Overflow用户
提问于 2013-10-12 07:12:26
回答 2查看 9.9K关注 0票数 5

当你在Matplotlib的savefig()函数中设置bbox_inches =‘that’时,它会试图找到封装图形窗口中所有内容的最紧的边界框。不幸的是,最紧的边界框似乎包括不可见的轴。

例如,下面是一段代码片段,其中设置bbox_inches =‘here’可按需工作:

代码语言:javascript
复制
import matplotlib.pylab as plt
fig = plt.figure(figsize = (5,5))
data_ax = fig.add_axes([0.2, 0.2, 0.6, 0.6])
data_ax.plot([1,2], [1,2])
plt.savefig('Test1.pdf', bbox_inches = 'tight', pad_inches = 0)

这会产生:

保存的pdf的边界对应于内容的边界。这很棒,除了我喜欢使用一组不可见的图形轴来放置注释。如果不可见轴延伸到可见内容的边界之外,则pdf边界大于可见内容。例如:

代码语言:javascript
复制
import matplotlib.pylab as plt
fig = plt.figure(figsize = (5,5))
fig_ax = fig.add_axes([0, 0, 1, 1], frame_on = False)
fig_ax.xaxis.set_visible(False)
fig_ax.yaxis.set_visible(False)
data_ax = fig.add_axes([0.2, 0.2, 0.6, 0.6])
data_ax.plot([1,2], [1,2])
plt.savefig('Test2.pdf', bbox_inches = 'tight', pad_inches = 0)

生产

如何强制savefig()忽略图形窗口中不可见的项目?我想出的唯一解决方案是自己计算边界框,并显式指定savefig()的bbox。

如果重要的话,我在Mac 10.8.5上的Python 2.7.3下运行Matplotlib 1.2.1。

EN

回答 2

Stack Overflow用户

发布于 2013-10-12 23:30:18

backend_bases.py中的相关函数(由canvas.print_figure调用,由figure.savefig调用以生成边界框)

代码语言:javascript
复制
def get_tightbbox(self, renderer):
    """
    Return a (tight) bounding box of the figure in inches.

    It only accounts axes title, axis labels, and axis
    ticklabels. Needs improvement.
    """

    bb = []
    for ax in self.axes:
        if ax.get_visible():
            bb.append(ax.get_tightbbox(renderer))

    _bbox = Bbox.union([b for b in bb if b.width != 0 or b.height != 0])

    bbox_inches = TransformedBbox(_bbox,
                                  Affine2D().scale(1. / self.dpi))

    return bbox_inches

决定轴是否“可见”的唯一考虑因素是ax.get_visible()是否返回true,即使轴中没有可见( artist.get_visible() == False或简单透明)的艺术家也是如此。

您观察到的边界框行为是正确的行为。

票数 3
EN

Stack Overflow用户

发布于 2013-10-13 11:01:09

谢谢你的帮助。我最初的问题是,“如何强制savefig()忽略图形窗口中不可见的项目?”当我放入fig_ax.set_visible(False)时,savefig()会忽略不可见的轴。不幸的是,当我设置fig_ax.set_visible(False)时,放置在fig_ax中的任何艺术家也是不可见的。我回到了我发布的原始图,在那里fig_ax不存在。

我目前正在将我的注释和数据轴标签放在默认的figure object fig中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19328610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档