我有几个由独立脚本生成的图形,我想将它们集中在一个复杂的图形中,每个面板都有自定义轴(位置和大小)。我知道到目前为止 matplotlib 似乎没有很好地支持这种方法,但我决定试一试。
现在,我可以将每个图形复制到我想要的面板中,但是“复制”的图形以某种方式被剪裁并且轴被弄乱了。坦率地说,由于我对 matplotlib 比较陌生,所以我不知道我缺少什么(例如,在 Matlab 中 copyobj() 会做到这一点)。
以下是我用于测试的示例代码:
def customfigure(flist,axlist):
# Margins
lm = 0.05
rm = 0.05
bm = 0.05
tm = 0.05
# basic grid
nrow = 2
ncol = 2
# rulers
hr = 0.02
vr = 0.02
# axis width
aw = (1-lm-rm-(ncol-1)*hr)/ncol
# axis height
ah = (1-tm-bm-(nrow-1)*vr)/nrow
# Make axis box
ax = [None]*(ncol*nrow)
ax[0] = [lm,bm,aw,ah]
ax[1] = [lm,bm+ah+vr,aw,ah]
ax[2] = [lm+aw+hr,bm,aw,ah]
ax[3] = [lm+aw+hr,bm+ah+vr,aw,ah]
fig = plt.figure(figsize=(10,6),dpi=80)
# Solution 1
for i in xrange(len(axlist)):
axlist[i].set_position(ax[i])
axlist[i].set_figure(fig)
flist[i].delaxes(axlist[i])
fig.add_axes(axlist[i])
close('all')
fig = [None]*4
ax = [None]*4
x = array([range(10)])
close('all')
fig = [None]*4
ax = [None]*4
t = arange(0.0, 2.0, 0.01)
color = ['k','r','g','b']
for i in xrange(4):
fig[i],ax[i] = plt.subplots()
s = sin(2*(i+1)*pi*t)
plt.plot(t, s,'-',color=color[i])
show()
customfigure(fig,ax)
由 customfigure() 构建的最终图(遗憾的是,我不能以新手的身份粘贴到这里)在这个图中至少有两个问题:(1) - 复制的图的大小不是我所期望的 set_position () 实例 (2) - 原始图集中在主图中时,数据范围似乎被剪裁到 1.0(而 x 轴应上升到 2.0) (3) - 然后好的,轴的位置完全拧紧了。 ..
我究竟做错了什么?
在此先感谢您的帮助。
米