use*_*817 10 python matplotlib
我在python中有一个带有3个子图的matplotlib图,全部在1列中.
我目前控制每个子图的高度:
gridspec.GridSpec(3, 1, height_ratios=[1, 3, 3])
Run Code Online (Sandbox Code Playgroud)
我没有间距:
plt.subplots_adjust(hspace=0.0)
Run Code Online (Sandbox Code Playgroud)
但我想在第2行和第3行之间留一些间距.
在其他一个答案中,我读到我可以做类似的事情:
gs1.update(left=0.05, right=0.48, wspace=0)
Run Code Online (Sandbox Code Playgroud)
但我真的不明白发生了什么.有人可以给我更多信息吗?
Amy*_*den 14
当您调用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()
Run Code Online (Sandbox Code Playgroud)
在这种特殊情况下,在第 2 行和第 3 行之间添加一个不可见的轴对象可能是最快的:
import matplotlib.pyplot as plt
gridspec = dict(hspace=0.0, height_ratios=[1, 1, 0.4, 3])
fig, axs = plt.subplots(nrows=4, ncols=1, gridspec_kw=gridspec)
axs[2].set_visible(False)
Run Code Online (Sandbox Code Playgroud)
我查看了文档,似乎不支持可变网格间距。所以我们必须设法解决这样的问题。
归档时间: |
|
查看次数: |
5137 次 |
最近记录: |