我在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)
但我真的不明白发生了什么。有人可以给我更多信息吗?
答案 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()
答案 1 :(得分:1)
答案 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 的间距:)。