【问题标题】:Adjusting space around figure with subplots用子图调整图形周围的空间
【发布时间】:2015-03-29 01:01:10
【问题描述】:

我正在使用 Matplotlib 并努力在我正在绘制的包含子图网格的图形周围获得正确数量的空白。

要求:能够选择所有子图的纵横比(它们都相同),准确定义子图与(已保存)图形边缘的顶部、底部和左侧之间的空白量。我不需要右边的任何额外空间。

到目前为止,我的代码包含以下内容:

import matplotlib.pyplot as plt
fig, axes = plt.subplots(ncols=6, nrows=2, sharex=True, 
                         sharey=True, figsize=(16,8))

axes[0,0].plot(x,y)
etc...

plt.subplots_adjust(hspace=1.0, wspace=0.02, bottom=0.17, left=0.075, top=0.18)

plt.savefig('Fig1_matplot.pdf', bbox_inches='tight')

事实上,如果我不指定figsize=(),则子图的纵横比是错误的。如果我这样做了,那么每当我更改subplots_adjust() 中的参数时,纵横比都会发生变化。显然是left cannot be >= rightbottom cannot be >= top。如果我确实将 top 定义为 0 以外的任何值,它会将所有子图完全压缩到图底部的一行。

如果我指定bbox_inches='tight',那么它会切断我在底部和左侧定义的空白,但如果我不指定它,那么我会在右侧留下多余的空白,因为我无法摆脱它(右边将是

我有点卡住了,任何帮助将不胜感激。

干杯。

【问题讨论】:

    标签: python python-2.7 matplotlib figure subplot


    【解决方案1】:

    使用subplots_adjust 时,leftrightbottomtop 的值将作为图形宽度和高度的分数提供。此外,所有值都是从图形的左边缘和下边缘测量的。这就是为什么righttop 不能低于leftbottom。一个典型的设置是:

    plt.subplots_adjust(left=0.1, right=0.9, bottom=0.1, top=0.9)
    

    另一方面,如果您想提供以英寸为单位的绝对值的空白,则必须除以图形的宽度和高度。例如,在您的情况下,可以通过以下方式在所有边缘周围留出 1 英寸的边距:

    plt.subplots_adjust(left=1/16.0, right=1-1/16.0, bottom=1/8.0, top=1-1/8.0)
    

    为了获得更多的通用性,我通常将图形的宽度和高度参数化为:

    figw, figh = 16.0, 8.0
    fig, axes = plt.subplots(ncols=6, nrows=2, sharex=True, sharey=True,
                             figsize=(figw, figh))
    plt.subplots_adjust(left=1/figw, right=1-1/figw, bottom=1/figh, top=1-1/figh)
    

    hspacewspace 被计算为一个面板的轴宽度和高度的分数,因此它们的绝对值取决于图形尺寸、外边距和子图的数量,这将需要更多一点用于微调的数学。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      相关资源
      最近更新 更多