在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函数绘制功能,每次都需要重新绘制它并用其他一些数据覆盖。我可以只绘制一次,然后将其与其他数据图叠加吗?
答案 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)