我有几个独立脚本生成的图形,我想用每个面板的自定义轴(位置和大小)包含在一个复杂图形中。我知道这种方法似乎尚未得到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) - 然后确定,轴的位置是完全拧紧的...
我做错了什么?
在此先感谢您的帮助。
中号
嗨,约翰,感谢你的好主意,虽然它概述了一种不同的方法。我想先制作数字然后把它们全部放在一个复杂的图形中的主要原因是因为一些独立的数字是由长脚本产生的,这可能需要很长的运行时间。因此,这个想法是首先保存数字,然后从文件中打开它们并将它们集中在一个数字中。我不明白为什么这是不可能的。我发现[this](https://www.mail-archive.com/[email protected]/msg06032.html)...但我不知道如何正确地重塑我的数字 – maurizio 2014-09-06 04:15:25