将python图存储为变量并重新加载以覆盖另一个图

时间:2018-11-11 18:21:32

标签: python matplotlib plot wolfram-mathematica

在Mathematica中,您可以将图存储在变量中,然后在以后叠加它们。例如,

plt1 = Plot[Cos[x],{x,0,Pi}];
plt2 = Plot[Sin[x],{x,0,Pi}];
plt3 = Plot[x,{x,0,Pi}];

Show[plt1,plt2]
Show[plt1,plt3]

给出两个图,一个覆盖cos(x)和sin(x)图,另一个覆盖cos(x)和x图。因此,我不需要为第二个覆盖图重新绘制cos(x),因为它已经保存在plt1中。

我想知道同样的事情也会在python中发生。我有一个耗时的2D函数绘制功能,每次都需要重新绘制它并用其他一些数据覆盖。我可以只绘制一次,然后将其与其他数据图叠加吗?

1 个答案:

答案 0 :(得分:0)

我将解释这个问题,询问有关matplotlib的问题(因为它带有标签),但是当然还有其他python绘图工具,它们的行为可能有所不同。

在matplotlib中,艺术家(例如线条)必然是一个人物的一部分。您不能将同一位艺术家添加到多个图形中。
因此,通常的解决方案是不要复制艺术家本身,而要复制艺术家。

def mycos(x, ax=None, **kwargs):
    ax = ax or plt.gca()
    ax.plot(x, np.cos(x), **kwargs)

def mysin(x, ax=None, **kwargs):
    ax = ax or plt.gca()
    ax.plot(x, np.sin(x), **kwargs)

x = np.linspace(0,2*np.pi)

# Create one figure with two subplots, plot one function in each subplot
fig, axes = plt.subplots(2)
mycos(x, ax=axes[0])
mysin(x, ax=axes[1])

# Create another figure with one subplot, plot both functions
fig, ax = plt.subplots(1)
mycos(x, ax=ax)
mysin(x, ax=ax)