与这个问题非常相似,但不同之处在于我的图形可以根据需要而变大。结果将使用figsave保存并在网页上查看,所以我不在乎最终图像的高度,只要子图之间的间距不重叠即可。

无论我允许多大的图形,子图似乎总是重叠。

我的代码当前看起来像/>

#1 楼

尝试使用plt.tight_layout

作为一个简单示例: br />

布局紧凑


评论


如果您显示应在绘图代码之后但在show()之前执行此操作,将会更加清楚

– pyj
16-4-9在15:02



ight_layout()被击中和错过。我一直在尝试了解什么时候不起作用(有较大的图间余量)有什么不同-通常是

– StephenBoesch
19年6月19日在18:21



这对我来说效果很好,除了它用子图标题覆盖了图形标题(字幕)。如果有人遇到类似的问题,这对我的案例stackoverflow.com/a/45161551/11740420有所帮助。也就是说,tight_layout()的rect参数

– Siyana Pavlova
19-10-28在18:06



有用的信息是,如果添加了轴标题,则可以使用plt.tight_layout(pad = 0.4,w_pad = 0.5,h_pad = 1.0)。

– EddyWD
20 Nov 26'在0:02

#2 楼

您可以使用plt.subplots_adjust更改子图之间的间距(源)

调用签名:是:

subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=None, hspace=None)


实际的默认值由rc文件控制。

评论


我尝试过弄乱hspace,但是增加它似乎只会使所有图变小,而没有解决重叠问题。我也尝试过使用其他参数,但是我不知道在其中实际指定的是left,right,bottom和top。

–mcstrother
2011年7月1日15:27

@mcstrother,如果您在显示绘图后单击“调整”按钮,则可以交互式更改所有6个参数,然后在找到有效的参数后将其复制到代码中。

–尼克T
2013年12月10日6:00

我没有看到调整按钮。虽然我在Jupyter笔记本中。我尝试了%matplotlib内联和%matplotlib笔记本。

–马特·克莱因史密斯(Matt Kleinsmith)
18年2月14日在6:48

@MattKleinsmith:调整按钮的悬停文本为“ Configure subplots”,并出现在Matplotlib的常规非笔记本使用中。它是“软盘”保存按钮左侧的按钮:pythonspot-9329.kxcdn.com/wp-content/uploads/2016/07/…-请注意,根据您所使用的窗口系统,该按钮的外观有所不同使用,但始终在保存按钮的左侧。

– John Zwinck
19年1月24日在2:48



@JohnZwinck,您评论中的链接现在已失效。

–user4015990
19年6月2日在19:26

#3 楼

我发现subplots_adjust(hspace = 0.001)最终对我有用。当我使用space = None时,每个图之间仍然有空白。将其设置为非常接近零的值似乎会迫使它们排队。我在这里上传的不是最优雅的代码,但是您可以看到hspace的工作原理。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as tic

fig = plt.figure()

x = np.arange(100)
y = 3.*np.sin(x*2.*np.pi/100.)

for i in range(5):
    temp = 510 + i
    ax = plt.subplot(temp)
    plt.plot(x,y)
    plt.subplots_adjust(hspace = .001)
    temp = tic.MaxNLocator(3)
    ax.yaxis.set_major_locator(temp)
    ax.set_xticklabels(())
    ax.title.set_visible(False)

plt.show()



评论


这段代码产生一个错误:ValueError Traceback(最近一次调用最近) 10中的 for range(5)中的i:11 temp = 510 + i ---> 12 ax = pl .subplot(temp)ValueError:num必须为1 <= num <= 5,不是0

– horaceT
20-10-17在22:04



#4 楼

类似于tight_layout matplotlib现在(从2.2版开始)提供constrained_layout。与tight_layout相比,constrained_layout是可以在代码中随时针对单个优化布局进行调用的特性,而figure(constrained_layout=True)是一个属性,可以激活并在每个绘制步骤之前优化布局。

因此需要在创建子图之前或期间激活它,例如subplots(constrained_layout=True)rcParams

示例:

import matplotlib.pyplot as plt

fig, axes = plt.subplots(4,4, constrained_layout=True)

plt.show()




constrained_layout也可以通过q4312079q

plt.rcParams['figure.constrained_layout.use'] = True



进行设置,查看新增内容和约束布局指南

评论


要尝试一下:没有看到此选项-而且tight_layout不可靠

– StephenBoesch
19年6月19日在18:40

这听起来很有希望,但并没有给我足够的间距(轴标签和标题仍然重叠),渲染时间更长。 ight_layout()效果更好

–craq
20 Mar 1 '20 at 22:22

@craq正确,一般来说,incondined_layout较慢,因为如该答案所示,它在每个绘制步骤之前都会优化布局。

–重要性
20 Mar 2 '20 at 8:45

对我来说,这是最有用的答案-对我来说,tight_layout总是会改善垂直间距,以便为面板标题留出空间,但这样做的代价是每次都要切断y轴标签。取而代之的是,这很完美,谢谢。

–阿德里安·汤普金斯(Adrian Tompkins)
20年5月1日在13:47

#5 楼

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(10,60))
plt.subplots_adjust( ... )


plt.subplots_adjust方法:

def subplots_adjust(*args, **kwargs):
    """
    call signature::

      subplots_adjust(left=None, bottom=None, right=None, top=None,
                      wspace=None, hspace=None)

    Tune the subplot layout via the
    :class:`matplotlib.figure.SubplotParams` mechanism.  The parameter
    meanings (and suggested defaults) are::

      left  = 0.125  # the left side of the subplots of the figure
      right = 0.9    # the right side of the subplots of the figure
      bottom = 0.1   # the bottom of the subplots of the figure
      top = 0.9      # the top of the subplots of the figure
      wspace = 0.2   # the amount of width reserved for blank space between subplots
      hspace = 0.2   # the amount of height reserved for white space between subplots

    The actual defaults are controlled by the rc file
    """
    fig = gcf()
    fig.subplots_adjust(*args, **kwargs)
    draw_if_interactive()




fig = plt.figure(figsize=(10,60))
fig.subplots_adjust( ... )


图片的大小很重要。

“我试图弄乱hspace,但是增加它似乎只会使所有图形变小而没有解决重叠问题。”

因此,要留出更多空白并保持子图的大小,总图像需要更大。

评论


图片的大小很重要,更大的图片大小可以解决这个问题!设置plt.figure(figsize =(10,7)),图片大小为2000 x 1400像素

– Belter
17年11月17日在11:23



#6 楼

您可以尝试使用subplot_tool()

plt.subplot_tool()


评论


参见matplotlib.org/api/_as_gen/matplotlib.pyplot.subplot_tool.html

–罗伯特·波拉克(Robert Pollak)
17年11月2日在10:40