matplotlib,重用不同图形中的线

matplotlib,重用不同图形中的线,matplotlib,Matplotlib,其目的是以最佳方式创建一系列详细的图和一个摘要图,您可以在其中比较不同解决方案的相对大小 为了向您展示我想要的,我制作了以下最小的示例 import matplotlib.pyplot as plt import numpy as np parameters = [2, 3] t = np.linspace(0, 5, 501) f_all = plt.figure() a_all = f_all.add_subplot(111) for p in parameters: fig

其目的是以最佳方式创建一系列详细的图和一个摘要图,您可以在其中比较不同解决方案的相对大小

为了向您展示我想要的,我制作了以下最小的示例

import matplotlib.pyplot as plt
import numpy as np

parameters = [2, 3]
t = np.linspace(0, 5, 501)

f_all = plt.figure()
a_all = f_all.add_subplot(111)

for p in parameters:
    fig = plt.figure()
    ax = fig.add_subplot(111)
    l, = ax.plot(t, np.sin(p*t)/p,
                 label='$\\omega=%d,\\quad{p}_0=%5.3f$'%(p,1./p))
    a_all.add_line(l)
    ax.legend()
    fig.savefig('pippo_%d'%p)

a_all.legend()
f_all.savefig('pippo_a')
预期结果由3个图形组成,两个图形各有一条正弦曲线,跨越[0,5]区间,另一个图形将两条曲线组合在一起

奥托,你可以在下面找到我的东西。当然,我遗漏了一些东西(一个非常基本的东西!)

我可以采取另一种方法,在内部循环中使用
a_all.plot(…)
(经过测试,它可以工作!),但现在我很好奇是否有一种方法可以重用一行代码,我在这里寻求您的帮助


保存第一个图形后,将该行添加到
a_all

for p in parameters:
    fig = plt.figure()
    ax = fig.add_subplot(111)
    l, = ax.plot(t, np.sin(p*t)/p,
                 label='$\\omega=%d,\\quad{p}_0=%5.3f$'%(p,1./p))
    ax.legend()
    fig.savefig('pippo_%d'%p)
    a_all.add_line(l)
编辑:

然后,您需要为
a_all
上的新行设置变换,以将它们移动到新轴。您可能还需要手动设置x和y限制

以下是完整的代码:

import matplotlib.pyplot as plt
import numpy as np

parameters = [2, 3]
t = np.linspace(0, 5, 501)

f_all = plt.figure()
a_all = f_all.add_subplot(111)

for p in parameters:
    fig = plt.figure()
    ax = fig.add_subplot(111)
    l, = ax.plot(t, np.sin(p*t)/p,
                 label='$\\omega=%d,\\quad{p}_0=%5.3f$'%(p,1./p))
    ax.legend()
    fig.savefig('pippo_%d.png'%p)
    a_all.add_line(l)

[newline.set_transform(a_all.transData) for newline in a_all.lines]

a_all.set_xlim(0,5)
a_all.set_ylim(-1,1)

a_all.legend()
f_all.savefig('pippo_a.png')


因此,如果我理解正确的话,只有当你将线条也添加到
a_-all
中时,才会出现绘制线条非常小的事实(也就是说,如果你注释线条
a_-all.add_-line(l)
)?我使用了另一种方法
a_-all.add_-line(…)
,并且在我尚未发布的版本中,
a_all,plot(…)
是的,在第一种情况下,我得到了切掉的线条,谢谢你,汤姆,我们已经取得了进展:使用你的任何一个建议,单个绘图现在都是正确的,但对我来说,python 2.7.10和matplotlib 1.4.2,在这两种情况下,组合绘图都与我在问题中展示的绘图相同——我还尝试了组合,首先是
savefig
,然后是
add_line(copy(l))
,但在这种情况下,组合图与我发布的图相同。哦,我不能接受这是我问题的解决方案,但这是朝着正确方向迈出的一步,不是吗?@gboffi:请参阅我的编辑。我认为为新行设置
转换
应该很有效!我想不出你是如何在20英尺或更短的时间内想出解决方案的,毕竟我几乎忘记了我的问题。。。谢谢你,再见