某些子图之间的间距,但不是全部

时间:2015-07-17 20:33:57

标签: python matplotlib

我在python中有一个带有3个子图的matplotlib图,全部在1列中。

我目前使用以下方法控制每个子图的高度:

gridspec.GridSpec(3, 1, height_ratios=[1, 3, 3])

我没有间距:

plt.subplots_adjust(hspace=0.0)

但我想在第2行和第3行之间留一些间距。

在其他一个答案中,我读到我可以做类似的事情:

gs1.update(left=0.05, right=0.48, wspace=0)

但我真的不明白发生了什么。有人可以给我更多信息吗?

3 个答案:

答案 0 :(得分:13)

当您调用update时,您将这些参数应用于该特定gridspec中的所有子图。如果要对不同的子图使用不同的参数,可以进行多个网格规范。但是,您需要确保它们的尺寸正确并且不重叠。一种方法是使用嵌套的gridspecs。由于底部两个图的总高度是顶部的6倍,因此外部栅格将具有[1,6]的高度比。

import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec


def do_stuff(cell): #just so the plots show up
    ax = plt.subplot(cell)
    ax.plot()
    ax.get_xaxis().set_visible(False)
    ax.get_yaxis().set_visible(False)
plt.subplots_adjust(hspace=0.0)
#make outer gridspec
outer = gridspec.GridSpec(2, 1, height_ratios = [1, 6]) 
#make nested gridspecs
gs1 = gridspec.GridSpecFromSubplotSpec(1, 1, subplot_spec = outer[0])
gs2 = gridspec.GridSpecFromSubplotSpec(2, 1, subplot_spec = outer[1], hspace = .05)
for cell in gs1:
    do_stuff(cell)
for cell in gs2:
    do_stuff(cell)
plt.show()

Plot with three subplots

答案 1 :(得分:1)

在这种情况下,最快的就是在第2行和第3行之间添加一个不可见的轴对象。

ttyplay ttyrecord

我仔细阅读了文档,似乎不支持可变网格间距。因此,我们必须采用这种解决方法。

subplots

答案 2 :(得分:0)

您可以使用 gridspec 并定义一个没有内容的额外子图,并根据您希望在其他子图之间存在的空间为其赋予较小的宽度比。

spec = gridspec.GridSpec(ncols=4, nrows=1, figure=fig,width_ratios=[1,1,0.4,2])
ax00  = fig.add_subplot(spec[0, 0])
ax01  = fig.add_subplot(spec[0, 1])
ax03  = fig.add_subplot(spec[0, 3])

在我的示例中,02 子图仅用于宽度比为 0.4 的间距:)。